我需要通过最接近的值获取数组中的对象。让我通过一个例子来解释一下:
const data = [
{ age: 52 },
{ age: 53 },
{ age: 54 },
{ age: 60, some: 'data' },
{ age: 66, something: 'else' },
{ age: 72 },
{ age: 78 },
{ age: 84 }
]
我确实通过使用获得了对象data.find((d)=> d.age === 60)
。但如果年龄是,我不会得到结果61
。
在这种情况下,我想得到相同的对象。
For 64
下一个对象({ age: 66, something: 'else' }
)应该被退回。
正如您所看到的,年龄值不是线性的。
您可以找到所有数字之间的差异,并且最接近零的数字将是您的结果,为了实现这一点,我使用了.reduce()
with Math.abs()
const data = [ { age: 52 }, { age: 53 }, { age: 54 }, { age: 60 }, { age: 66 }, { age: 72 }, { age: 78 }, { age: 84 } ];
const getAge = (data, target) =>
data.reduce((acc, obj) =>
Math.abs(target - obj.age) < Math.abs(target - acc.age) ? obj : acc
);
console.log(getAge(data, 61)); // {age: 60}
console.log(getAge(data, 50)); // {age: 52}
console.log(getAge(data, -1)); // {age: 52}
console.log(getAge(data, 90)); // {age: 84}
这也适用于具有其他属性的更通用的对象,而不仅仅是age
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)