javascript - 如何通过比较其值来删除重复的嵌套对象

标签 javascript arrays node.js object

我想知道如何删除比较其值的重复嵌套对象。

 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/

相关文章:

javascript - javascript可以获取入站链接吗

javascript - 使用 jQuery 将使用复选框的数据属性从 false 更改为 true

javascript - 在 server.js 中需要 loki inMemory 数据库会导致 nodemon 不断重启

c++ - Binary/Int 文件读取 & 数组存储

java - 不同的数组名称为 "x"不同的数组

node.js - 接收错误: message: 'Calendar usage limits exceeded.' with new project with attendees in event object

javascript - 淡入淡出的背景横幅图像,自动调整为当前窗口宽度

c - 传递结构指针的问题和 "conflicting types"错误

node.js - 在 Node.js 中发送带有参数的 http get 请求

javascript - 如何将图像上传到cloudinary