我可以使用此函数从数组中删除所有重复项:
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(鲍勃)
答案 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();