javascript - 比较数组中的两个对象,删除重复数据,然后合并不同数据?

标签 javascript arrays web

我正在获取数组中的对象列表,其中一些是重复的。但是,产生重复项的条件不同。

想象一个数组:

var array = [{id: 1, name: 'test', condition: 'left'},
            {id: 2, name: 'example', condition: 'left'},
            {id: 1, name: 'test', condition: 'right'},
            {id: 3, name: 'foobar', condition: 'right'}]

我在寻找什么:

var solution = [{id: 1, name: 'test', condition: ['left', 'right']},
                {id: 2, name: 'example', condition: 'left'},
                {id: 3, name: 'foobar', condition: 'right'}]

我可以使用此方法毫无问题地删除重复项:

var available = result.reduce((unique, o) => {
  if (!unique.some((obj) => obj.id === o.id && obj.name === o.name)) {
    unique.push(o);
  }
  return unique;
}, []);

但想合并条件数据

最佳答案

您可以使用带有组合键的对象来收集所有内容。

const
    array = [{ id: 1, name: 'test', condition: 'left' }, { id: 2, name: 'example', condition: 'left' }, { id: 1, name: 'test', condition: 'right' }, { id: 3, name: 'foobar', condition: 'right' }],
    keys = ['id', 'name'],
    result = Object.values(array.reduce((r, o) => {
        const key = keys.map(k => o[k]).join('|');
        if (r[key]) r[key].condition = [].concat(r[key].condition, o.condition);
        else r[key] = { ...o };
        return r;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 比较数组中的两个对象,删除重复数据,然后合并不同数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66458845/

相关文章:

Javascript - 简化一堆长重复的隐藏/显示功能

javascript - 如果未选中复选框,则禁用表单提交

php - 如何使用递归用户定义函数模拟 array_reverse()?

python - 动态规划,带约束的最大子数组

iphone - iPhone/iPad/iPod网站的Web模板(根据应用商店的要求)

javascript - 样式复选框

javascript - Kendo Grid 更新时表现奇怪

javascript - 收藏类型

asp.net - iPad Retina 显示屏仅对网页使用 1024

html 5查询自动文本大小