繁体   English   中英

Lodash 从嵌套数组中删除重复项

[英]Lodash remove duplicates from nested array

刚开始查看 lodash 并试图弄清楚如何从嵌套对象中的 arrays 中删除重复项。

使用循环:

const _ = require('lodash');

let data = {
    "deviceA": {
        "serviceA": [
            "Foo",
            "Bar",
            "Foo Bar A",
            "Foo Bar A",
            "Foo Bar A"
        ],
        "serviceB": [
            "Foo",
            "Bar",
            "Foo Bar B",
            "Foo Bar B",
            "Foo Bar B"
        ]
    }
}


for (const key in data) {
    for (const key2 in data[key]) {
        data[key][key2] = _.uniqWith(data[key][key2], _.isEqual)
    }
}

console.log(data)

是否可以使用纯 lodash 解析嵌套的 object 并更新数组以删除重复项而不使用 for 循环?

我认为你可以考虑一个没有 lodash 的解决方案,下面是一个如何使用纯 js 本地实现的示例。

 let data = { "deviceA": { "serviceA": [ "Foo", "Bar", "Foo Bar A", "Foo Bar A", "Foo Bar A" ], "serviceB": [ "Foo", "Bar", "Foo Bar B", "Foo Bar B", "Foo Bar B" ] } } const noDup = Object.entries(data).reduce((p, n) => { const a = Object.entries(n[1]).reduce((p1, n1) => ({...p1, [n1[0]]: [...new Set(n1[1])]}), {}) return {...p, [n[0]]: a} }, {}) console.log(noDup)

您可以结合 uniq 和 mapValues 来实现它。

 let data = { "deviceA": { "serviceA": [ "Foo", "Bar", "Foo Bar A", "Foo Bar A", "Foo Bar A" ], "serviceB": [ "Foo", "Bar", "Foo Bar B", "Foo Bar B", "Foo Bar B" ] }, "deviceB": { "serviceA": [ "A", "A", "Foo Bar A", ], "serviceB": [ "B", "B", "Foo Bar B", ] } } const items = _.mapValues(data, (device) => _.mapValues(device, (service) =>_.uniq(service))) console.log(items)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM