如果重复,则仅返回数组中索引较高的元素

时间:2015-07-22 05:08:50

标签: javascript

我可以使用此函数从数组中删除所有重复项:

function make_unique(array) {
    return array.reduce(function(p, c) {
        if (p.indexOf(c) < 0) p.push(c);
        return p;
    }, []);
};

但是这给了我任何2个重复项的较低索引元素。我需要一种方法来返回数组中重复的任何元素的“更高”索引副本。

所以在以下数组中:

array = ["bob", "chris", "susan", "steve", "melissa", "steve", "bob"]

它会给我元素1(克里斯),2(苏珊),4(梅利莎),5(史蒂夫),6(鲍勃)

2 个答案:

答案 0 :(得分:5)

使用filter更简单的“制作独特”功能:

var uniques = array.filter(function(v,idx) {
  return array.indexOf(v)===idx;
})

需要从尾巴过滤吗?使用lastIndexOf

var uniques = array.filter(function(v,idx) {
  return array.lastIndexOf(v)===idx;
});

但请记住,这没有任何意义:如果您要删除重复项,那么在最早和最新实例之间没有差异,因此它们的排序应该完全无关。 / p>

如果订单确实很重要,那么有些东西你没有告诉我们在消除副本歧义方面很重要,你应该在你的代码中表明(或者放弃当然的要求)

答案 1 :(得分:0)

如何使用underscore.js我认为您不必创建util函数。

in underscore.js

var array = ["bob", "chris", "susan", "steve", "melissa", "steve", "bob"]
var result = _.uniq(array.reverse()).reverse();