Home > Net >  Find Smallest Number from javascript object
Find Smallest Number from javascript object

Time:10-30

I have a form where the user enters their city, this then returns for all the cities where my client is based in a 30 mile radius. I am now trying to find the closest city out of these and return just one result with both City Name and Distance (in metres).

I have a for loop which processes my results:

for (var i = 0; i < origins.length; i  ) {
  var results = response.rows[i].elements;
  //console.log(response);
  for (var j = 0; j < results.length; j  ) {

    // If distance is less than 30 miles (48280 metres)
    if(results[j].distance.value < 48280) {
      var closestCitiesDist = results[j].distance.value
      var closestCitiesName = origins[i]

      var closestCities = {"cityName" : closestCitiesName, "cityDistance" : closestCitiesDist}
      console.log(closestCities);

    }

  }
}

This now returns an array for each result, containing cityName and cityDistance variable. Out of each of these arrays, I would like to find the single closest city (the array with the smallest cityDistance), and be able to output "City xx is the closest (xxx metres away)"

CodePudding user response:

You use Array.prototype.sort() on an array of objects, and sort it as you wish

Reference Material: Array.prototype.sort

Here element at the 0 index will have the smalles value property

const object = [{ name: 'test', value: 3}, { name: 'test2', value: 1}];

const sorted = object.sort((a, b) => a.value - b.value);
console.log(sorted);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

CodePudding user response:

You could use Array#sort which has a time complexity of O(n log n) or instead you could do a single backwards pass of bubble sort in O(n), to bring the smallest city to the front of the array.

const object = [
  { cityName: 'Vancouver', cityDistance: 3 },
  { cityName: 'Paris', cityDistance: 4 },
  { cityName: 'London', cityDistance: 1 },
];

for (let i = object.length - 1; i > 0; i--) {
  if (object[i].cityDistance < object[i - 1].cityDistance) {
    temp = object[i - 1];
    object[i - 1] = object[i];
    object[i] = temp;
  }
}

console.log(
  `City ${object[0].cityName} is the closest (${object[0].cityDistance} metres away)`
);
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>

  • Related