返回最接近的匹配对象

时间:2017-07-26 10:16:28

标签: javascript arrays

我有一个关于在数组中查找对象的问题。我有一个包含这样的对象的数组:

var myArray = [{ index: 20, value: -1800000 }, { index: 21, value: -1200000 }, { index: 22, value: -10000 }, { index: 23, value: -1000 }, { index: 24, value: 0 }, { index: 25, value: 1000 }, { index: 26, value: 10000 }, { index: 27, value: 1800000 }];

现在的问题是,如何返回value为== 0的元素的索引,或者如果不存在value == 0的元素,则返回具有最小正值的对象的第一个索引。 我不需要排序数组,我只想得到一个最佳匹配指数,其值等于零或接近于零但不是负数。

1 个答案:

答案 0 :(得分:2)

首先使用find,如果找不到,循环排序的数组并返回第一个正匹配:

var myArray = [{ index: 20, value: -1800000 }, { index: 21, value: -1200000 }, { index: 22, value: -10000 }, { index: 23, value: -1000 }, { index: 24, value: 6 }, { index: 25, value: 1000 }, { index: 26, value: 10000 }, { index: 27, value: 1800000 }];

function findClosestToZero(arr) {
    let r = arr.find(v => v.value === 0);
    if (r) return r.index;
    arr.sort((a,b) => a.value > b.value);
    for (let o of arr) {
        if (o.value > 0) return o.index;
    }
}

console.log(findClosestToZero(myArray));

如果您的数组已按值

排序
 let r = arr.find(v => v.value >= 0);

也会这样做。 (或者你总是首先对数组进行排序,但如果你应该这样做取决于数据)