从数组中删除重复项的最简单方法,同时仍保留最后一个

时间:2014-05-13 07:50:02

标签: javascript jquery arrays

从数组中删除具有相同特定值的重复项的最简单方法是什么,同时仍然保持最新的重复项?

假设我有这个功能。

bucket.bucketList =[];

bucket.addItem = function(item) {
  bucket.bucketList.push(item);
}

该函数在每次鼠标滚动时将一个名为foo的对象推送到数组中:

有些foo也有财产,

  

foo.name =“something”;

问题是,根据其属性名称删除副本的最佳方法是什么,同时保持推送的最新数据?

所以现在的概念是删除所有重复项,除了最后一项,具有foo.name = "example".

PS:我在我的项目中已经使用了jQuery,所以如果jQuery比vanilla有更优雅的方式,我会非常乐意使用它。

修改:这是我的确切代码段:

bucket.addItem = function(item) {
  bucket.bucketList.push(item);
  var dict = {}, item;
for (var i = bucket.bucketList.length - 1; i >= 0 ; i--) {
    item = bucket.bucketList[i];
    if (item.name) {
        // if already in the dict, remove this array entry
        if (dict[item.name] === true) {
            bucket.bucketList.splice(i, 1);
        } else {
            // add it to the dict
            dict[item.name] = true;
        }
    }
}
}

不幸的是,上面的函数从数组中删除了具有相同name属性的所有重复项。我想要的只是删除具有 SPECIFIC 属性名称的重复项。例如:item.name ="example"

1 个答案:

答案 0 :(得分:1)

试试这个:

bucket.addItem = function(item) {
    bucket.bucketList = bucket.bucketList.filter(function(e){
        return item.name !== "example" || e.name !== "example"
    });
    bucket.bucketList.push(item);
}

这基本上删除了与当前项目同名的所有项目,然后将当前项目推送到列表中,但仅当名称为"example"