我找到了一种方法来获取数组中特定属性的最小值。这是一个两步过程。有更好,更直接的方式吗?
目标:从数组中获取最小价格值
示例:
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步?
谢谢!
答案 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;
答案 2 :(得分:0)
您可以使用Array.from方法创建一个价格和使用Math.min的数组,如:
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;