将最后一个元素保存在具有相同属性的数组中

时间:2014-05-13 04:45:11

标签: javascript jquery arrays

让我们想象一下我有这个数组:

bucket.bucketList =[];

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

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

部分 foo's也有一个属性foo.name = "something";

问题是,什么是根据名称属性名称删除所有重复项的最佳方法,同时保持最新的一次推送?

我在我的项目中已经使用了jQuery,所以如果jQuery有一种比香草JS更优雅的方式,我会非常乐意使用它。

1 个答案:

答案 0 :(得分:2)

此代码删除所有重复的名称,保留数组中的最后一个名称。

您可以向后遍历数组并删除任何具有您已经看过的名称的项目,使用对象跟踪您已经看过的名称。通过向后遍历,保留最后一个,当从数组中删除当前条目时,不必进行任何数组索引更正:

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;
        }
    }
}