从数组中删除具有相同特定值的重复项的最简单方法是什么,同时仍然保持最新的重复项?
假设我有这个功能。
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"
答案 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"