2016-12-30 41 views
3

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

目标:从阵列得到最小价格值

例子:

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?

谢谢!

回答

6

完美使用案例Array.reduce()

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

如果你不熟悉,看到Mozilla's documentation,但简单,第一个参数是一个回调,其第一两个参数是1)最终将在执行结束时返回的运行值以及2)输入数组中的每个元素。第二个参数是初始运行值。回调函数返回将传入的下一个数组元素的新运行值。

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)

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)

相关问题