我有一个像这样的数组
var data = [
{ i: 0, j: 0, day: 5 },
{ i: 1, j: 0, day: 3 },
{ i: 1, j: 1, day: 5 },
{ i: 1, j: 2, day: 10 },
{ i: 2, j: 0, day: 5 },
{ i: 3, j: 0, day: 5 },
{ i: 4, j: 0, day: 6 },
{ i: 4, j: 1, day: 10 }
]
我想从JSON返回一行,其中day
值最小
例如在上面的数组中,最小day
是3
,我想要
{ i: 1, j: 0, day: 3 }
作为输出
我尝试过这种方法
Math.min.apply(Math,data.map(function(item){return item.day}))
但它只返回最小day
我找到的一个解决方案是使用indexOf
方法,但我认为这不是一个好习惯。有没有任何速记方法?
答案 0 :(得分:5)
您可以使用Array#reduce
并返回具有较小day
属性的元素。
对于空数组,您需要提前检查,因为
在没有初始值的情况下调用空数组上的reduce是一个错误。
var data = [{ i: 0, j: 0, day: 5 }, { i: 1, j: 0, day: 3 }, { i: 1, j: 1, day: 5 }, { i: 1, j: 2, day: 10 }, { i: 2, j: 0, day: 5 }, { i: 3, j: 0, day: 5 }, { i: 4, j: 0, day: 6 }, { i: 4, j: 1, day: 10 }],
result = data.reduce(function (a, b) {
return a.day < b.day ? a : b;
});
console.log(result);