配列の重複排除は一般的な要件です。同じタイプの配列の重複排除を一時的に検討します。主なことは、アイデアを明確にし、パフォーマンスを考慮することです。以下の方法は基本的にインターネット上で公開されているので、ここでは簡単にまとめておきます。
もの:
1. 配列を 1 つずつ比較し、比較結果が同じ場合は、次の
を削除します。
2. 配列を走査し、1 つずつ比較し、同じでない場合は前の重複をスキップし、新しい配列
に入れます。
3. 任意の配列要素を取得して新しい配列に入れ、残りの配列要素を走査して任意の 1 つを取得し、新しい配列の要素と 1 つずつ比較し、相違がある場合は新しい配列に入れます。
4. 配列を走査し、要素をオブジェクトの属性として取得し、その属性が存在するかどうかを判断します
1. 次の重複を削除します:
function ov1(arr){ //var a1=((new Date).getTime()) for(var i=0;i<arr.length;i++) for(var j=i+1;j<arr.length;j++) if(arr[i]===arr[j]){arr.splice(j,1);j--;} //console.info((new Date).getTime()-a1) return arr.sort(function(a,b){return a-b}); }
2. これは従来の方法です。同じ場合はループから抜け出します。
function ov2(a) { //var a1=((new Date).getTime()) var b = [], n = a.length, i, j; for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) if (a[i] === a[j]){j=false;break;} if(j)b.push(a[i]); } //console.info((new Date).getTime()-a1) return b.sort(function(a,b){return a-b}); }
3. ここでも j ループが続いていますが、i の値が変化しています。これは新しい i ループと同等です:
function ov3(a) { //var a1=((new Date).getTime()) var b = [], n = a.length, i, j; for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) if (a[i] === a[j])j=++i b.push(a[i]);} //console.info((new Date).getTime()-a1) return b.sort(function(a,b){return a-b}); }
4. 新しい配列内のすべてが一意であることを確認します
function ov4(ar){ //var a1=((new Date).getTime()) var m=[],f; for(var i=0;i<ar.length;i++){ f=true; for(var j=0;j<m.length;j++) if(ar[i]===m[j]){f=false;break;}; if(f)m.push(ar[i])} //console.info((new Date).getTime()-a1) return m.sort(function(a,b){return a-b}); }
5. オブジェクト属性を使用する
function ov5(ar){ // var a1=(new Date).getTime() var m,n=[],o= {}; for (var i=0;(m= ar[i])!==undefined;i++) if (!o[m]){n.push(m);o[m]=true;} // console.info((new Date).getTime()-a1) return n.sort(function(a,b){return a-b});; }
JavaScript 配列から重複値を削除するための上記の推奨方法はすべてエディターによって共有される内容ですので、参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。