获取特定Array属性的最小值的更好方法

时间:2016-12-30 15:09:42

标签: javascript arrays min

我找到了一种方法来获取数组中特定属性的最小值。这是一个两步过程。有更好,更直接的方式吗?

目标:从数组中获取最小价格值

示例:

array = [{"ID": 1, "Price": 2.30}, {"ID": 2, "Price": 3.00}, {"ID": 3, "Price": 1.75}];

这就是我的所作所为:

步骤1:创建仅包含价格值的临时数组

var filteredArray = array.map(function (val) {
                            return val["Price"];
                        });

第2步:找到最低价格值

var arrayMinValue = Function.prototype.apply.bind(Math.min, null);

var minPrice = arrayMinValue(filteredArray)

这似乎有效。但需要第1步吗?有没有办法直接找到最小价格值而不使用第1步?

谢谢!

3 个答案:

答案 0 :(得分:6)

Array.reduce()的完美用例:

array.reduce((lowest, obj) => Math.min(obj.Price, lowest), Infinity)

如果您不熟悉,请参阅Mozilla's documentation,但简而言之,第一个参数是一个回调,其前两个参数是1)最终将在执行结束时返回的运行值和2 )来自输入数组的每个元素。第二个参数是初始运行值。回调返回将与下一个数组元素一起传入的新运行值。

答案 1 :(得分:3)

使用Array#reduce方法通过迭代值减少为单个值。



array = [{
  "ID": 1,
  "Price": 2.30
}, {
  "ID": 2,
  "Price": 3.00
}, {
  "ID": 3,
  "Price": 1.75
}];

// iterate over the array elements
var min = array.reduce(function(prev, next) {
  // return the minimum value
  return prev < next.Price ? prev : next.Price;
  // set initial value as infinity which is the highest possible value
}, Math.infinity);

console.log(min)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用Array.from方法创建一个价格和使用Math.min的数组,如:

&#13;
&#13;
var arr = [{
  "ID": 1,
  "Price": 2.30
}, {
  "ID": 2,
  "Price": 3.00
}, {
  "ID": 3,
  "Price": 1.75
}];
var minPrice = Math.min.apply(null, Array.from(arr, e => e['Price']));
console.log(minPrice)
&#13;
&#13;
&#13;