我有一个非常简单的JavaScript数组,可能包含也可能不包含重复项。
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
我需要删除重复项并将唯一值放入新数组。
我可以指出我尝试过的所有代码,但我认为它们没有用,因为它们不起作用。我也接受jQuery解决方案。
类似的问题:
获取数组中的所有非唯一值(即:重复/多次出现)
我有一个非常简单的JavaScript数组,可能包含也可能不包含重复项。
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
我需要删除重复项并将唯一值放入新数组。
我可以指出我尝试过的所有代码,但我认为它们没有用,因为它们不起作用。我也接受jQuery解决方案。
类似的问题:
获取数组中的所有非唯一值(即:重复/多次出现)
当前回答
此解决方案使用了一个新数组和函数内部的对象映射。它所做的就是循环遍历原始数组,并将每个整数添加到对象映射中
`if (!unique[int])`
捕获此错误,因为对象上已存在具有相同编号的键属性。因此,跳过该数字,不允许将其推入新数组。
function removeRepeats(ints) {
var unique = {}
var newInts = []
for (var i = 0; i < ints.length; i++) {
var int = ints[i]
if (!unique[int]) {
unique[int] = 1
newInts.push(int)
}
}
return newInts
}
var example = [100, 100, 100, 100, 500]
console.log(removeRepeats(example)) // prints [100, 500]
其他回答
除了是一个比当前答案更简单、更简洁的解决方案(减去未来的ES6答案)之外,我还测试了这一点,而且速度也快得多:
var uniqueArray = dupeArray.filter(function(item, i, self){
return self.lastIndexOf(item) == i;
});
一个警告:Array.lastIndexOf()是在IE9中添加的,所以如果您需要低于这个值,您需要在其他地方查找。
快速简便地使用lodash-var array=[“12346”,“12347”,“1234”,“23449”,“123459”];console.log(_.uniqWith(array,_.isEqual));
您只需在JavaScript中使用filter方法的第二个-index参数即可:
var a = [2,3,4,5,5,4];
a.filter(function(value, index){ return a.indexOf(value) == index });
或在短手
a.filter((v,i) => a.indexOf(v) == i)
https://jsfiddle.net/2w0k5tz8/
function remove_duplicates(array_){
var ret_array = new Array();
for (var a = array_.length - 1; a >= 0; a--) {
for (var b = array_.length - 1; b >= 0; b--) {
if(array_[a] == array_[b] && a != b){
delete array_[b];
}
};
if(array_[a] != undefined)
ret_array.push(array_[a]);
};
return ret_array;
}
console.log(remove_duplicates(Array(1,1,1,2,2,2,3,3,3)));
循环、删除重复项并创建克隆数组占位符,因为不会更新数组索引。
向后循环以获得更好的性能(循环不需要一直检查阵列的长度)
使用Undercore.js
它是一个库,包含一系列用于处理数组的函数。
这是jQuery的燕尾服和Backbone.js的领带吊带。
_.uniq格式
_.uniq(array,[isSorted],[iiterator])别名:唯一使用==测试对象,生成数组的重复自由版本平等如果您事先知道数组已排序isSorted的true将运行更快的算法。如果你想基于转换计算唯一项,传递迭代器作用
实例
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
alert(_.uniq(names, false));
注意:Lo Dash(一个下划线的竞争对手)也提供了类似的.uniq实现。