Javascript 从阵列中删除重复项的最简单方法,同时保留最后一个

Javascript 从阵列中删除重复项的最简单方法,同时保留最后一个,javascript,jquery,arrays,Javascript,Jquery,Arrays,从具有相同特定值的数组中删除重复项的最简单方法是什么,同时仍保留最近的一个 假设我有这个函数 bucket.bucketList =[]; bucket.addItem = function(item) { bucket.bucketList.push(item); } 该函数在每次鼠标滚动时将名为foo this的对象推入数组: 有些富也有财产 foo.name=“某物” 问题是,在保留最新内容的同时,根据其属性名称删除副本的最佳方法是什么 因此,现在的概念是删除所有重复项,最后一个除

从具有相同特定值的数组中删除重复项的最简单方法是什么,同时仍保留最近的一个

假设我有这个函数

bucket.bucketList =[];

bucket.addItem = function(item) {
  bucket.bucketList.push(item);
}
该函数在每次鼠标滚动时将名为foo this的对象推入数组:

有些富也有财产

foo.name=“某物”

问题是,在保留最新内容的同时,根据其属性名称删除副本的最佳方法是什么

因此,现在的概念是删除所有重复项,最后一个除外,其中包含
foo.name=“example”。

PS:我已经在我的项目中使用了jQuery,因此如果jQuery有一种比vanilla JS更优雅的方式,我会非常乐意使用它

编辑:这是我的代码片段:

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属性的所有重复项。我想要的只是删除具有特定属性名称的重复项。e、 g:
item.name=“example”

试试这个:

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

这基本上会删除与当前项具有相同名称的所有项,然后将当前项推送到列表上,但只有当名称为
“example”

时,才需要使用数组,特别是?如果没有,请尝试使用映射,而只是覆盖给定键的值。是的,目前我是这样做的,因为我没有时间实现其他一些我不知道的东西,但我将在稍后明确查找映射。Kryiakides,你实际想用代码实现什么?如果您只使用数组,因为您不熟悉其他数据结构,但基本上只需要一组唯一的项,而不需要对它们进行排序,那么在这种情况下,映射将是正确的数据结构。“但我稍后将明确查找映射是什么”基本上已经在使用映射,
dict[item.name]
。您只需在函数调用之间使其持久化。你到底需要这个数组做什么?@FelixKling嘿,我只是复制/粘贴了代码,并在上面添加了一些香料,不需要对我进行所有的判断:)这样就可以了,但速度会非常慢(时间与列表的大小成比例)。找出OP试图做什么,看看是否有更有效的替代方案,这可能是有意义的。@MichaelAaronSafyan犹豫是否发布我的确切代码,因为它太具体了,无法帮助其他访问此帖子的人,但我现在就把它放在那里,让事情变得更清楚。@MichaelAaronSafyan:我真的不知道是否有更快的方法来确保没有重复。这只会迭代数组一次。“非常慢”是言过其实了,依我看。这听起来好像这个脚本在完成之前必须运行一分钟。@Cerbus,鉴于OP规定的严格要求,没有更好的方法来完成它;然而,了解OP真正想要实现的目标可能意味着一个更有效的替代方案。非常慢不是夸大其词;操作为O(n),OP表示这将在每个鼠标滚动上执行(即非常频繁),具体取决于n的大小,这很容易使滚动变得僵硬(当然,与O(n^2)或O(n^3)算法相比,它并不“非常慢”)@Cerbrus迈克尔说的很不幸是正确的-性能确实是必须的-因为鼠标滚动也会触发其他CPU消耗功能。