【问题标题】:Removing duplicates in a array object删除数组对象中的重复项
【发布时间】:2016-04-15 08:55:07
【问题描述】:

我有一个数组对象如下:

详情:

Array[2]
>0: Object
    Name:"a"
    Desc:"Desc"
>1: Object
    Name:"b"
    Desc:"Desc2"
>2: Object
    Name:"C"
    Desc:"Desc"

我想删除最后一个对象,因为“Desc”与第一个条目有重复条目。

我在 javascript 中尝试过这种方法,

removedup = details.reduce(function(a,b) { if (a.indexOf(b) < 0) a.push(b); return a },[]);

我想要输出,删除重复项并因此调整数组大小。

详情:

Array[1]
>0: Object
    Name:"a"
    Desc:"Desc"
>1: Object
    Name:"b"
    Desc:"Desc2"

我可以在逻辑上修改什么?

【问题讨论】:

标签: javascript jquery html arrays


【解决方案1】:

您可以使用 Array#filter()thisArgs 作为临时对象。

var details = [{ Name: 'a', desc: 'Desc' }, { Name: 'b', desc: 'Desc2' }, { Name: 'C', desc: 'Desc' }, {Name: 'a', desc: 'toString'}],
    removedup = details.filter(function (a) {
        if (!(a.desc in this)) {
            this[a.desc] = true;
            return true;
        }
    }, Object.create(null));

document.write('<pre> ' + JSON.stringify(removedup, 0, 4) + '</pre>');

【讨论】:

  • {Name: 'a', desc: 'toString'} 怎么样?
  • @georg,它应该怎么办?
  • @NinaScholz:我想它应该包含在输出中。
  • @NinaScholz:是的,这样更好。
  • @NinaScholz 或者您可以使用 hasOwnProperty 代替 in
【解决方案2】:

试试这个:

var modified = details.filter(function (item) {
    return !details.some(function (item_) {
        return item_ !== item && item_.Desc === item.Desc;
    });
});

【讨论】:

    【解决方案3】:

    使用 loadash

    var output = _.chain(Array).reverse().indexBy('Desc').toArray().value();

    【讨论】:

      猜你喜欢
      • 2012-11-24
      • 2017-09-01
      • 2017-04-10
      • 2016-03-12
      • 2016-07-02
      相关资源
      最近更新 更多