【发布时间】:2019-04-02 04:41:37
【问题描述】:
尝试通过消除具有已存在于另一个对象中的特定属性的对象(重复)来过滤对象数组。删除哪个对象的决定应该基于另一个属性。
示例: 对于可能看起来像这样的对象数组,目标是过滤所有“用户”重复项并保留具有最旧“日期”属性的对象。
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;
},[]);
虽然我不知道该怎么做才能在重复的情况下保留“最旧”的对象并删除最新的对象。 非常感谢你的帮助!真的很感激。
【问题讨论】:
-
你的数据是按
date排序的吗? -
不,很遗憾没有。这些对象在实际用例中要大得多,并且根据使用的位置以不同的方式排序......
-
您是否只有给定的两个或更多属性?你想保留这些对象吗?
-
是的,还有更多属性。不打算保留这些对象。
标签: javascript arrays filter duplicates javascript-objects