尝试通过消除具有已存在于另一个对象(重复)中的特定属性的对象来过滤对象数组。删除哪个对象的决定应基于另一个属性。
例子: 对于一组对象,可能看起来像这样,目标是过滤所有“用户”重复项并保留具有最旧“日期”属性的对象。
const arr = [
{user: 'Alex', date: '1540801929945'},
{user: 'Bill', date: '1640801929946'},
{user: 'Carl', date: '1740801929947'},
{user: 'Alex', date: '1840801929948'},
]
预期结果:
filteredArr = [
{user: 'Alex', date: '1540801929945'},
{user: 'Bill', date: '1640801929946'},
{user: 'Carl', date: '1740801929947'},
]
我管理了只保留唯一对象的基本过滤。
const filteredArr = arr.reduce((unique, o) => {
if(!unique.some(obj => obj.user === o.user) {
unique.push(o);
}
return unique;
},[]);
虽然我不知道该怎么做才能在重复的情况下保留“最旧”的对象并删除最新的对象。 非常感谢你的帮助!非常感谢。
最佳答案
将数组缩减为以user
为键的对象。如果用户不在 unique
对象中,或者如果它的日期比实际情况“更早”,则将其添加到对象中。使用 Object.values()
将对象转换为数组.
注意:因为您的日期是字符串,所以在比较时将它们转换为数字(我使用 +
operator )。
const array = [{ user: 'Alex', date: '1540801929945' }, { user: 'Bill', date: '1640801929946' }, { user: 'Carl', date: '1740801929947' }, { user: 'Alex', date: '1840801929948' }];
const filteredArray = Object.values(array.reduce((unique, o) => {
if(!unique[o.user] || +o.date > +unique[o.user].date) unique[o.user] = o;
return unique;
}, {}));
console.log(filteredArray);
关于javascript - JS - 过滤一个对象数组以查找一个属性的重复项,并根据另一个属性决定保留哪个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042292/