发布
社区首页 >问答首页 >对象中的嵌套重复数组

对象中的嵌套重复数组
EN

Stack Overflow用户
提问于 2015-01-09 01:19:00
回答 2查看 135关注 0票数 0

我试图采取一系列的对象,并做两件事。

1.)从重复的数组中删除对象,创建一个具有重复项名称的新数组。

原件:

代码语言:javascript
代码运行次数:0
复制
var duplicates = [];

var objects = [
    {
        name: 'foo',
        nums: [1,2]
    },
    {
        name: 'bar',
        nums: [3,2]
    },
    {
        name: 'baz',
        nums: [1,2]
    },
    {
        name: 'bum',
        nums: [2,3]
    },
    {
        name: 'bam',
        nums: [1,2]
    },
]

期望产出:

代码语言:javascript
代码运行次数:0
复制
duplicates = ['foo', 'baz', 'bam'];

objects = [
    {
        name: 'bar',
        nums: [3,2]
    },
    {
        name: 'bum',
        nums: [2,3]
    }
]

有人能帮忙吗?我在我的项目中使用了房客。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-09 01:48:49

如果nums数组中元素的顺序重要:

代码语言:javascript
代码运行次数:0
复制
_.pluck(_.flatten(_.filter(_.groupBy(objects, "nums"), function(el) {
   return (el.length !== 1)
})), "name")

或者更整洁一点

代码语言:javascript
代码运行次数:0
复制
var hmap = _(objects).groupBy("nums").values();
var unique = hmap.where({'length': 1}).flatten().value();
var duplicates = hmap.flatten().difference(unique).value();
票数 1
EN

Stack Overflow用户

发布于 2015-01-09 16:53:30

我不知道underscore.js,下面是如何使用简单的JS:

代码语言:javascript
代码运行次数:0
复制
var counts = {};
var duplicates = [];
for (var i = 0; i < objects.length; i++) {
    var str = JSON.stringify(objects[i].nums);
    if (str in counts) {
        counts[str]++;
    } else {
        counts[str] = 1;
    }
}
objects = objects.filter(function(val) {
  if (counts[JSON.stringify(val.nums)] == 1) {
    return true;
  } else {
    duplicates.push(val.name);
    return false;
  }
});

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27852433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档