用lodash删除重复项 [英] removing duplicates with lodash
本文介绍了用lodash删除重复项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下数组:
data = [{
name: "Robert",
urls: [{
provider: "facebook",
url: "http://twitter.com/rob"
}]
}, {
name: "Robert",
urls: [{
provider: "youtube",
url: "http://youtube.com/robs"
}]
}, {
name: "Linda is a perfect duplicate",
urls: [{
provider: "youtube",
url: "http://youtube.com/lindaTube"
}]
}, {
name: "Linda is a perfect duplicate",
urls: [{
provider: "youtube",
url: "http://youtube.com/lindaTube"
}]
}]
我需要基于data
构建一个看起来像这样的新数组:
I need to build a new array based on data
that look like this one:
newdata = [{
name: "Robert",
urls: [{
provider: "facebook",
url: "http://twitter.com/rob"
}, {
provider: "youtube",
url: "http://youtube.com/robs"
}]
}, {
name: "Linda is a perfect duplicate",
urls: [{
provider: "youtube",
url: "http://youtube.com/lindaTube"
}]
}];
我正在使用.merge
和.keyBy
,但是[urls]
始终被覆盖.
这是我的方法:
i'm using .merge
and .keyBy
but [urls]
is always overwritten.
here is how i do it:
let newdata = [];
data.forEach((val, i) => {
newdata = _.values(_.merge(
_.keyBy(newdata, 'name'),
_.keyBy(data[i], 'name')
));
});
推荐答案
您可以使用 name
分组.使用 lodash#map
将组重建为数组.使用 lodash#flatMap
将所有网址转换为扁平格式,因此我们可以删除所有网址通过 lodash#uniqWith
具有
You can use lodash#groupBy
to group the collection by name
. Rebuild the group into an array using lodash#map
. Use lodash#flatMap
to obtain all urls into a flattened format, so we can remove all the duplicates through lodash#uniqWith
that has a lodash#isEqual
comparator function.
var result = _(data)
.groupBy('name')
.map((group, name) => ({
name,
urls: _(group).flatMap('urls').uniqWith(_.isEqual).value()
}))
.value();
var data = [{
name: "Robert",
urls: [{
provider: "facebook",
url: "http://twitter.com/rob"
}]
}, {
name: "Robert",
urls: [{
provider: "youtube",
url: "http://youtube.com/robs"
}]
}, {
name: "Linda is a perfect duplicate",
urls: [{
provider: "youtube",
url: "http://youtube.com/lindaTube"
}]
}, {
name: "Linda is a perfect duplicate",
urls: [{
provider: "youtube",
url: "http://youtube.com/lindaTube"
}]
}];
var result = _(data)
.groupBy('name')
.map((group, name) => ({
name,
urls: _(group).flatMap('urls').uniqWith(_.isEqual).value()
}))
.value();
console.log(result);
.as-console-wrapper{min-height:100%;top:0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
<!--
<script src="https://cdn.jsdelivr.net/g/lodash@4(lodash.min.js+lodash.fp.min.js)"></script>
-->
这篇关于用lodash删除重复项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文