1。JSオブジェクトのキーの非回復キーの原則によれば、アレイを記憶した方法は、最も従来の考え方に従って次のとおりです。
次のようにコードコードをコピーします。
関数別れ(arr){
var obj = {}、temp = [];
for(var i = 0; i <arr.length; i ++){
if(!obj [arr [i]]){{
temp.push(arr [i]);
obj [arr [i]] = true;
}
}
return temp;
}
var testarr = [1,2,3,2];
console.log(digtherArray(testarr));
それはかなり良さそうですが、それが状況に変わるなら:
var testarr1 = [1,2,3、 "2"];
console.log(digtherArray(testarr));
同じ結果であることが判明しました。 。
上記に応じて、上記の方法を改善します。
次のようにコードコードをコピーします。
関数archingarrayimprove(arr){
var obj = {}、temp = [];
for(var i = 0; i <arr.length; i ++){
if(!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(digtherArray(testarr));
おっと、いい!この機能は完全に大丈夫です。別の状況を見てみましょう!
var testarr1 = [1,2,3、 "2"、{a:1}、{b:1}];
console.log(digtherArray(testarr)); // [1,2,3、{a:1}]
この結果、{b:1}を削除する方法は、重いプロセス中に有用なデータを削除する場合、非常に深刻な問題です。 。
2。1インチの主なアイデアは、JSオブジェクトのキーの概念を使用して思考を導くことですが、最終的にはすべての問題の解決策を検討することはできません。エッセンスが欲しい
次のように、スライスとスプライスの方法を使用して、アレイの重量を実現します。
次のようにコードコードをコピーします。
関数distancerray2(arr){{{
var test = arr.slice(0);
for(var i = 0; i <temp.length; i ++){
for(j = i+1; j <temp.length; j ++){
if(temp [j] == temp [i]){
temp.splice(j、1);
j ---;
}
}
}
return temp;
}
テスト:
var testarr1 = [1,2,3、 "2"];
console.log(digtherArray(testarr));
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(){alert( "b b ( "b");}]
テスト結果はまだ私たちのニーズを満たすことができません。私たちのチームの上記の方法を研究した後、主な問題は2つのオブジェクトの使用の動作にあることがわかりました。この状況を考慮して、私たち、私たち、私たち、私たちはできます。
次のようにコードコードをコピーします。
関数distancerrayall(arr){
var isequal = function(obj1、obj2){{
// 2つのオブジェクトは等しく、等しくなければなりません。
if(obj1 === obj2){{
trueを返します。
}
if(typeof(obj1)== typeof(obj2)){{
if(ibj1)== "object" && typeof(obj2)== "object"){{
var pcount = 0;
for(obj1のvar p){
pcount ++;
if(!isequal(obj1 [p]、obj2 [p]){{
falseを返します。
}
}
for(obj2のvar p){
pcount-;
}
pcount == 0を返します。
} else if(typeof(obj1)== "function" && typeof(obj2)== "function"){
if(obj1.toString()!! = obj2.toString()){
falseを返します。
}
} それ以外 {
if(obj1!= obj2){{
falseを返します。
}
}
} それ以外 {
falseを返します。
}
trueを返します。
}
var test = arr.slice(0);
for(var i = 0; i <temp.length; i ++){
for(j = i+1; j <temp.length; j ++){
ifqual(temp [j]、temp [i]){{){{{
temp.splice(j、1);
j ---;
}
}
}
return temp;
}
テスト:
var testarr3 = [1,2,2、{a:1}、{a:1}、{a:1、b:2}、function(){alert( "b");}、function(){alert ( "b");}] ;;
console.log(digtherarrayall(testarr3));
// results [1,2、{a:1}、{a:1、b:2}、function(){alert( "b");}]
おっと、最終的には、各方法のパフォーマンスの問題については、次の議論のために留まります!最後の方法は、複雑な配列にとって重要な法律を強調することですが、対応する実行オーバーヘッドも非常に大きい場合があります。重い。これにより、ニーズに応じて、あまりにも完璧なものを求めないでください。