如何搜索最小值的对象?

时间:2019-02-22 10:39:52

标签: javascript

我有一个包含对象列表的数组:

let intervals = 
    [
       { id: "1", interval_start: "0", interval_end: "40" },
       { id: "2", interval_start: "41", interval_end: "65" },
       { id: "3", interval_start: "66", interval_end: "80" },
       { id: "4", interval_start: "81", interval_end: "100" },
    ];
    
var result = intervals.reduce(function(prev, current) {
  return (prev.interval_end > current.interval_end) ? prev : current
});

console.log(result)

我试图搜索最小的interval_endid: 1

的对象

但这将返回id: 3

2 个答案:

答案 0 :(得分:2)

问题似乎出在字符串比较中

let intervals = 
[
   { id: "1", interval_start: "0", interval_end: "40" },
   { id: "2", interval_start: "41", interval_end: "65" },
   { id: "3", interval_start: "66", interval_end: "80" },
   { id: "4", interval_start: "81", interval_end: "100" },
];

console.log(intervals.reduce((prev, current) => parseInt(prev.interval_end) < parseInt(current.interval_end) ? prev : current, {}))

答案 1 :(得分:0)

您需要取小于作为条件和数值,因为您将比较字符串。例如,对于'40''100'来说这是错误的。

let intervals = [
        { id: "1", interval_start: "0", interval_end: "40" },
        { id: "2", interval_start: "41", interval_end: "65" },
        { id: "3", interval_start: "66", interval_end: "80" },
        { id: "4", interval_start: "81", interval_end: "100" }
    ],
    result = intervals.reduce((prev, current) =>
        +prev.interval_end < +current.interval_end ? prev : current
    );

console.log(result);