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

Cyb*_*tic 2 javascript

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

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

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

所以在以下数组中:

array = ["bob", "chris", "susan", "steve", "melissa", "steve", "bob"]
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ans 5

更简单的"制作独特"功能filter:

var uniques = array.filter(function(v,idx) {
  return array.indexOf(v)===idx;
})
Run Code Online (Sandbox Code Playgroud)

需要从"尾巴"过滤?用途lastIndexOf:

var uniques = array.filter(function(v,idx) {
  return array.lastIndexOf(v)===idx;
});
Run Code Online (Sandbox Code Playgroud)

但请记住,这没有任何意义:如果你删除重复项,最早和最新实例之间没有区别,所以它们的排序应该完全无关紧要.

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

  • 您可以使用`lastIndexOf`来避免两个反向操作.`array.filter(function(v,idx){return array.lastIndexOf(v)=== idx;});` (2认同)