ホームページ ウェブフロントエンド jsチュートリアル js配列重複排除_javascriptスキルの問題の概要

js配列重複排除_javascriptスキルの問題の概要

May 16, 2016 pm 05:02 PM

1.js オブジェクトのキーの非重複の原則に従って、配列の重複を排除するための最も一般的な考え方によれば、次のような方法が考えられます。以下:

コードをコピー コードは次のとおりです:

function uniqueArray(arr){
var obj={},temp=[];
for(var i=0;iif(!obj[arr[i]]){
temp.push(arr[i]);
obj[arr[i]] =true;
}
}
return temp;
}
var testarr=[1 ,2,3,2];
console.log (distinctArray(testarr));//[1,2,3]

かなり良さそうですが、以下になった場合状況:
var testarr1=[1,2 ,3,"2"];
console.log(distinctArray(testarr));// [1,2,3]
それでも結果は同じですが、これは私たちが望んでいることではありません。結果は [1,2,3,"2"] である必要があります。つまり、重複排除プロセス中に型の整合性を確保する必要があります。

上記の状況を考慮して、上記の方法を改良しました。

コードをコピーします コードは次のとおりです。

function uniqueArray Improvement(arr){
var obj={},temp=[];
for(var i=0;iif(!obj[typeof (arr[i]) arr[i]]){
temp.push(arr[i]);
obj[typeof (arr[i]) arr[i]] =true;
}
}
return temp;
}

上記のメソッドは、オブジェクトにキーを入れるときに typeof プレフィックスを追加するので、その効果を見てみましょう。
var testarr1=[1,2,3,"2"];
console.log(distinctArray(testarr));// [1,2,3,"2"]
おっと、そうではありません悪い!では、この関数はまったく問題ありませんか? 別の状況を見てみましょう。
var testarr1=[1,2,3,"2",{a:1},{b:1}];
console.log(distinctArray(testarr));// [1,2, 3. "2",{a:1}]
この結果が表示されました。なぜ {b:1} が不可解にも削除されたのでしょうか? 重複排除の問題で有用なデータが誤って削除された場合は非常に深刻です。方法は完璧ではないので、引き続き下を向いてみましょう。

2.1 では、主なアイデアは、js オブジェクト内のキーの非反復の概念を使用して思考を導くことですが、最終的には解決できませんでした。すべての問題が解決されたので、必要な機能を実現するために思考モードを変更することを検討できます。

次のように、スライス メソッドとスプライス メソッドを使用して配列の重複排除を実現します。

コードをコピーします コードは次のとおりです。

function uniqueArray2(arr){
var temp=arr.slice(0);//配列を temp
for(var i=0;ifor(j=i 1;jif(temp[j]==temp[i]){
temp.splice(j ,1 );//要素
j--;
}
}
}
return temp;
}

テスト:
var testarr1=[1,2,3,"2"];
console.log(distinctArray(testarr));//[1,2,3]
var testarr2=[1,2, 2, {a:1},{a:1},{a:1,b:2},function(){alert("b");},function(){alert("b");}] ;
//[1,2,{a:1},{a:1},{a:1,b:2},function(){alert("b");},function(){アラート( "b");}]

テスト結果はまだ私たちのニーズを満たしていません。どうすればよいですか?私たちのチームが上記の方法を調査した結果、2 つのオブジェクトが等しいかどうかを比較する操作に主な問題があることがわかりました。distinctArray2 で「==」を使用すると、ビュー内の大きなオブジェクトの内容が等しいかどうかを区別できません。この状況を解決するには、別のメソッドを作成しました:

コードをコピー コードは次のとおりです:

function uniqueArrayAll(arr){
var isEqual=function(obj1,obj2){
//2 つのオブジェクトのアドレスは等しく、等しくなければなりません
if(obj1===obj2){
return true;
}
if(typeof(obj1)==typeof(obj2)){
if(typeof(obj1)=="オブジェクト"&&typeof(obj2)=="オブジェクト"){
var pcount=0;
for(var p in obj1){
pcount ;
if(!isEqual(obj1[p],obj2[p])){
return false;
}
}
for(var p in obj2){
pcount--;
}
return pcount==0;
}else if(typeof(obj1) =="function"&&typeof(obj2)= ="function"){
if(obj1.toString()!=obj2.toString()){
return false;
}
}else {
if(obj1!=obj2 ){
return false;
}
}
}else{
return false;
}
return true;
}
var temp=arr.slice(0);//配列を temp
for(var i=0;ifor(j=i 1) にコピーします;jif(isEqual(temp[j],temp[i])){
temp.splice(j,1);//要素
jを削除します--;
}
}
}
温度を返す;
}

テスト:
var testArr3=[1,2,2,{a:1},{a:1},{a:1,b:2},function(){alert("b") ;},function(){alert("b");}];
console.log(distinctArrayAll(testArr3));
//結果[1,2,{a:1},{a: 1,b:2},function(){alert("b");}]

ああ、ようやく重複を削除するタスクが正常に完了しました。各メソッドのパフォーマンスの問題については、次の議論に譲ります。最後の方法は、複雑な配列を重複排除できるユニバーサル重複排除メソッドであることがわかりますが、実際のプロジェクト開発では、重複排除に必要なのは純粋な数値または文字列だけである場合もあります。これに対応する実行オーバーヘッドも非常に大きくなります。ニーズに応じて対応するアルゴリズムを柔軟に選択できます。完璧を求めるのではなく、ニーズを満たすことに基づいてプログラムをより効率的にすることのみを追求します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScriptの文字列文字を交換します

カスタムGoogle検索APIセットアップチュートリアル カスタムGoogle検索APIセットアップチュートリアル Mar 04, 2025 am 01:06 AM

カスタムGoogle検索APIセットアップチュートリアル

例JSONファイルの例 例JSONファイルの例 Mar 03, 2025 am 12:35 AM

例JSONファイルの例

10 jQuery構文蛍光物 10 jQuery構文蛍光物 Mar 02, 2025 am 12:32 AM

10 jQuery構文蛍光物

8見事なjQueryページレイアウトプラグイン 8見事なjQueryページレイアウトプラグイン Mar 06, 2025 am 12:48 AM

8見事なjQueryページレイアウトプラグイン

独自のAjax Webアプリケーションを構築します 独自のAjax Webアプリケーションを構築します Mar 09, 2025 am 12:11 AM

独自のAjax Webアプリケーションを構築します

' this' JavaScriptで? ' this' JavaScriptで? Mar 04, 2025 am 01:15 AM

' this' JavaScriptで?

10 JavaScript&JQuery MVCチュートリアル 10 JavaScript&JQuery MVCチュートリアル Mar 02, 2025 am 01:16 AM

10 JavaScript&JQuery MVCチュートリアル

See all articles