配列のJS
重複排除アレイ
一般的に使用される方法、および重複排除の効率アレイ分析:
まず、私たちは、アレイは、主に重複排除のテストのために使用されて構築し、私たちの主な実験の大きさは1000,10000,100000,500000です。以下の配列を生成する具体的な方法:
function buildDataArr (size) {
var array = [];
for (var i =0; i< size; i++) {
var num = Math.round(Math.random() * size);
array.push(num);
}
return array;
}
var arr1 = buildDataArr(1000);
var arr2 = buildDataArr(10000);
var arr3 = buildDataArr(100000);
var arr4 = buildDataArr(500000);
デエンファシスフィルタ指標と方法を用いて行います
function distinct(numberArr) { return numberArr.filter((item, index)=> { return numberArr.indexOf(item) === index }) }
重いように二重の循環のアレイを使用することにより、
function distinctFor(numberArr) { for (let i=0, len=numberArr.length; i<len; i++) { for (let j=i+1; j<len; j++) { if (numberArr[i] == numberArr[j]) { numberArr.splice(j, 1); // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一 len--; j--; } } } return numberArr }
...体重のとドを使用してのために含めます
function distinctInclude(numberArr) { let result = [] for (let i of numberArr) { !result.includes(i) && result.push(i) } return result }
重いように並べ替えを使用して、
function distinctSort(numberArr) { numberArr = numberArr.sort() let result = [numberArr[0]] for (let i=1, len=numberArr.length; i<len; i++) { numberArr[i] !== numberArr[i-1] && result.push(numberArr[i]) } return result }
新しいセットのデリを使用します
function distinctSet(numberArr) { return Array.from(new Set(numberArr)) }
に重いものを使用します
function distinctObj(numberArr) { let result = [] let obj = {} for (var i of numberArr) { if (!obj[i]) { result.push(i) obj[i] = 1 } } return result }
まあ、導入の上記の方法は終わった、のパフォーマンスを見てみましょう:
1000年 | 10000 | 100000 | 500000 | |
---|---|---|---|---|
distinctFilter | 0 | 40 | 3992 | 105859 |
distinctFor | 2 | 59 | 5873 | 147234 |
distinctInclude | 1 | 24 | 2320 | 54794 |
distinctSort | 1 | 8 | 69 | 264 |
distinctSet | 0 | 1 | 12 | 78 |
distinctObj | 1 | 1 | 9 | 33 |