我想知道如何删除比较其值的重复嵌套对象。
const values = [
{ i: 2, j: 4, l: 36 },
{ i: 4, j: 2, l: 36 },
{ i: 0, j: 2, l: 28 },
{ i: 0, j: 4, l: 28 },
{ i: 1, j: 2, l: 28 },
{ i: 1, j: 4, l: 28 },
{ i: 2, j: 1, l: 28 },
{ i: 2, j: 3, l: 28 },
{ i: 2, j: 5, l: 28 },
{ i: 3, j: 2, l: 28 },
{ i: 3, j: 4, l: 28 },
{ i: 4, j: 1, l: 28 },
{ i: 4, j: 3, l: 28 },
{ i: 4, j: 5, l: 28 },
{ i: 5, j: 2, l: 28 },
{ i: 5, j: 4, l: 28 },
{ i: 0, j: 1, l: 20 },
{ i: 0, j: 3, l: 20 },
{ i: 0, j: 5, l: 20 },
{ i: 1, j: 3, l: 20 },
{ i: 1, j: 5, l: 20 },
{ i: 3, j: 1, l: 20 },
{ i: 3, j: 5, l: 20 },
{ i: 5, j: 1, l: 20 },
{ i: 5, j: 3, l: 20 }
];
在这种情况下,我想删除第二个重复的对象(满足 以下条件)并让第一个:
value[i].i === value[j].j && value[i].j === value[i].i && value[i].l ===
value[j].l
想要的结果:
const result = [
{ i: 2, j: 4, l: 36 },
{ i: 0, j: 2, l: 28 },
{ i: 0, j: 4, l: 28 },
{ i: 1, j: 2, l: 28 },
{ i: 1, j: 4, l: 28 },
{ i: 2, j: 3, l: 28 },
{ i: 2, j: 5, l: 28 },
{ i: 3, j: 4, l: 28 },
{ i: 4, j: 5, l: 28 },
{ i: 0, j: 1, l: 20 },
{ i: 0, j: 3, l: 20 },
{ i: 0, j: 5, l: 20 },
{ i: 1, j: 3, l: 20 },
{ i: 1, j: 5, l: 20 },
{ i: 3, j: 5, l: 20 }
];
提前致谢。
最佳答案
您可以将这些值作为组合键,并使用 Set
进行检查以进行过滤。
var values = [{ i: 2, j: 4, l: 36 }, { i: 4, j: 2, l: 36 }, { i: 0, j: 2, l: 28 }, { i: 0, j: 4, l: 28 }, { i: 1, j: 2, l: 28 }, { i: 1, j: 4, l: 28 }, { i: 2, j: 1, l: 28 }, { i: 2, j: 3, l: 28 }, { i: 2, j: 5, l: 28 }, { i: 3, j: 2, l: 28 }, { i: 3, j: 4, l: 28 }, { i: 4, j: 1, l: 28 }, { i: 4, j: 3, l: 28 }, { i: 4, j: 5, l: 28 }, { i: 5, j: 2, l: 28 }, { i: 5, j: 4, l: 28 }, { i: 0, j: 1, l: 20 }, { i: 0, j: 3, l: 20 }, { i: 0, j: 5, l: 20 }, { i: 1, j: 3, l: 20 }, { i: 1, j: 5, l: 20 }, { i: 3, j: 1, l: 20 }, { i: 3, j: 5, l: 20 }, { i: 5, j: 1, l: 20 }, { i: 5, j: 3, l: 20 }],
s = new Set,
filtered = values.filter(o => {
var key1 = ['i', 'j', 'l'].map(k => o[k]).join('|'),
key2 = ['j', 'i', 'l'].map(k => o[k]).join('|');
return !s.has(key1) && !s.has(key2) && s.add(key1) && s.add(key2);
});
console.log(values.length, filtered.length);
console.log(filtered);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 如何通过比较其值来删除重复的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55517896/