[英]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.