注意:过滤数组中未定义的元素
英语薄弱,可能被描述为不准确。 >﹏<< / p>
谢谢
function delRepeatArray1(arr) {
console.time();
var result = Array.from(new Set(arr));
console.timeEnd();
return result;
}
function delRepeatArray2(arr) {
console.time();
var result = arr.filter(function (em, index, arr) {
return arr.indexOf(em) === index;
});
console.timeEnd();
return result;
}
var arr = ["undefined", "200", 0, -0, 200, undefined, undefined, null, true, null, "true", false, 0, true, 200, false],
result1 = delRepeatArray1(arr),
result2 = delRepeatArray2(arr);
console.log(result1);
console.log(result2);
答案 0 :(得分:0)
这里有一个简短的代码片段,可以从提供的数组中获得独特的价值:
var arr = ["undefined", "200", 0, -0, 200, undefined, undefined, null, true, null, "true", false, 0, true, 200, false];
var uniqueNames = [];
$.each(arr, function(i, el){
if($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
});
console.log(uniqueNames);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 1 :(得分:0)
我发现了一个benchmark,它为此比较了几种方法。在我的系统上,最快的方法是简单循环。
function unique(arr) {
let out = [];
const len = arr.length;
for (let i = 0; i != len; ++i) {
const obj = arr[i];
if (out.indexOf(obj) == -1) out.push(obj);
}
return out;
}
尽管,该基准测试表明,在其他系统上使用reduce
的速度更快。
function unique(arr) {
return arr.reduce((out, obj) => {
if (out.indexOf(obj) == -1) out.push(obj);
return out;
}, []);
}
答案 2 :(得分:0)
我们不能简单地将其设为一组?
var arr = ["undefined", "200", 0, -0, 200, undefined, undefined, null, true, null, "true", false, 0, true, 200, false];
var filteredarr = arr.filter(Boolean); //filter undefined
var set = new Set(filteredarr); //remove duplicates
console.log(set);
答案 3 :(得分:0)
最快的方法是使用Set
过滤出重复项。
在小型阵列上没有任何区别,要对代码进行基准测试,应尝试使用较大的阵列(例如,至少65k个元素)。然后,您会看到常规循环(您的delRepeatArray2
)与Set
相比要慢得多,而undefined
基本上可以与较小的项目组保持相同的时间。
说,我们还在谈论几毫秒。
如果要过滤出undefined
,最好在之后进行处理,直到将值减小为唯一值,这样集合中就只有一个var set = new Set(arr);
set.delete(undefined);
return Array.from(set);
,并且可以轻松删除:
{{1}}