从json数组返回与最小值匹配的单个json对象

时间:2017-08-30 13:06:41

标签: javascript node.js

我有一个像这样的数组

     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值最小

例如在上面的数组中,最小day3,我想要

{ i: 1, j: 0, day: 3 } 

作为输出

我尝试过这种方法

Math.min.apply(Math,data.map(function(item){return item.day}))但它只返回最小day

我找到的一个解决方案是使用indexOf方法,但我认为这不是一个好习惯。有没有任何速记方法?

1 个答案:

答案 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);