我有一个关于在数组中查找对象的问题。我有一个包含这样的对象的数组:
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的元素,则返回具有最小正值的对象的第一个索引。 我不需要排序数组,我只想得到一个最佳匹配指数,其值等于零或接近于零但不是负数。
答案 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);
也会这样做。 (或者你总是首先对数组进行排序,但如果你应该这样做取决于数据)