让我们想象一下我有这个数组:
bucket.bucketList =[];
bucket.addItem = function(item) {
bucket.bucketList.push(item);
}
该函数将名为foo
的对象推送到每个鼠标滚动的数组中
部分 foo's
也有一个属性foo.name = "something";
问题是,什么是根据名称属性名称删除所有重复项的最佳方法,同时保持最新的一次推送?
我在我的项目中已经使用了jQuery,所以如果jQuery有一种比香草JS更优雅的方式,我会非常乐意使用它。
答案 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;
}
}
}