这是我用来返回重复元素的方式..但是当我的数组有大量带有长文本的项目时,我正面临着浏览器关闭等最危险的性能问题.
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var sorted_arr = arr.sort();
var results = [];
for (var i = 0; i < arr.length - 1; i++) {
if (sorted_arr[i + 1] == sorted_arr[i]) {
results.push(sorted_arr[i]);
}
}
alert(results);
Run Code Online (Sandbox Code Playgroud)
请建议我这样做的最好方法
我没有得到你想要的,但如果你需要返回重复项,你可以使用缓存对象.这适用于数字或字符串或其他.
var arr = [9, 9, 111, 2, 3, 4, 4, 5, 7];
var cache = {};
var results = [];
for (var i = 0, len = arr.length; i < len; i++) {
if(cache[arr[i]] === true){
results.push(arr[i]);
}else{
cache[arr[i]] = true;
}
}
console.log(results);//returns an array with 9 and 4
Run Code Online (Sandbox Code Playgroud)
当然,您可以执行其他操作,例如删除多个项目等.
编辑 - 我写了一篇关于如何从数组中删除重复项的博客文章
如果你有数组过滤器,你也有indexOf和lastIndexOf,你可以返回重复项而不进行排序.
var results, arr= [9, 9, 111, 2, 3, 4, 4, 5, 4, 7];
if(arr.filter){
results= arr.filter(function(itm, i){
return arr.lastIndexOf(itm)== i && arr.indexOf(itm)!= i;
});
}
else// use your loop method
alert(results)
/* returned value: (Array)
9,4
*/
Run Code Online (Sandbox Code Playgroud)