2016-12-30 38 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)

相關問題