use*_*695 3 javascript arrays object ecmascript-6
我需要通过最接近的值获取数组中的对象。让我通过一个例子来解释它:
const data = [
{ age: 52 },
{ age: 53 },
{ age: 54 },
{ age: 60, some: 'data' },
{ age: 66, something: 'else' },
{ age: 72 },
{ age: 78 },
{ age: 84 }
]
Run Code Online (Sandbox Code Playgroud)
我确实通过使用data.find((d)=> d.age === 60). 但是如果年龄是 ,我不会得到结果61。在这种情况下,我想获得相同的对象。
对于64下一个对象 ( { age: 66, something: 'else' }) 应该返回。
如您所见,年龄值不是线性的。
您可以找到所有数字之间的差异,并且最接近零的那个将是您的结果,为了实现这一点,我使用.reduce()过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}Run Code Online (Sandbox Code Playgroud)
这也适用于具有除age.
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |