1。INDEXOFおよびLASTINDEXOFメソッド:
IE7は、配列オブジェクトのインデックスを使用してエラーを報告するため、互換性のものを書き直す必要があります。
コードコピーは次のとおりです。
array.prototype.lastindexof(item、index){
var n = this.length、i =(index == null || index> n-1)?n-1:index;
if(i <0)i = n+i;
for(; i> = 0; i--)
if(this [i] === item)// consolidar判断、indexof、lastindexof
私を返します。
return -1;
}
2.シャッフル方法:配列をシャッフルします。
コードコピーは次のとおりです。
関数シャッフル(ターゲット){
var i = target.length、j、temp;
for(; i> 0; j = parseint(math.random() * i)、x =ターゲット[ - i]、ターゲット[i] =ターゲット[j]、ターゲット[j] = x){}
//長さ= 10を想定してから、Math.random()*10-> [0,10)、parseint、[0,9]を想定して、1つをランダムに選択し、配列の最後のアイテムと交換します。 2番目のループ[0,8]は、配列の最後から2番目の用語と交換します。
ターゲットを返します。
}
3.アレイのフラットンプロセス:フラットン、1次元配列を返します
コードコピーは次のとおりです。
関数Flatten(arr){
var result = [];
arr.foreach(function(item){
if(array.isarray(item))result.concat(flatten(item));
else result.push(item);
});
返品結果;
}
4。ユニークな方法:アレイの重複排除操作
この方法は、インタビュアーが複数の実装方法を備えているため、尋ねたいと思っています。最も一般的な方法はループ用の2つです。私が知っている最も一般的なことは、オブジェクトAを使用し、次にa for loop array arr。 ([arr [i]])が存在する場合、そしてそれが存在しない場合、新しく定義された配列結果にプッシュされるたびに。存在は繰り返し証明されるため、結果を押し込む必要はありません。 「123」、123のこのソリューションは同じと見なされます。実際、1つは文字列であり、もう1つは数字であり、同じと見なされるべきではありません。
したがって、次の方法が表示されます:[1、 "1"、 "1"]
コードコピーは次のとおりです。
if((typeof obj [array [i]])!=(typeof array [i])|| obj [array [i]]!= array [i]){
a.push(array [i]);
obj [array [i]] = array [i];
}
//最初にタイプが同じかどうかを判断します。それらが同じ場合、その値が等しいかどうかを判断します。それらが平等でない場合、それらは救われます。それらが等しい場合、彼らはこの値が以前に存在していたことを証明します。
タイプが異なる場合、ここには2つの状況があります。
最初のケースでは、OBJは以前にこのデータを以前に保存しています。たとえば、OBJ [123] = 123、Array [i] = "123"です。この時点で、Typeof obj [array [i]])は数字であり、typeof array [i]は文字列であるため、配列に保存されます。
2番目のケースは、OBJがこのデータをまだ保存していないことです。たとえば、配列[i] = "123"、obj ["123"] =未定義です。現時点では、typeof obj [array [i]])は未定義=未定義のtype of of undefinedです。
この方法では、文字列と数字が同じであるが、オブジェクトが同じである状況を解決することはできません。例:a = {1:2}、b = {2:1};
最初のループ、typeof obj [a] = undefined、typeof a = objectの場合。 dopited obj [a] = a。実際、obj [object] = a;
2番目のループでは、Typeof OBJ [b]はTypeof OBJ [オブジェクト]に等しく、実際にはa = objectのtype、typeof b = objectです。したがって、obj [array [i]]!= array [i] |、つまりobj [b] - > obj [object] - > a! = b、そのため堆積
obj [b] = b;つまり、obj [object] = b;以前のobj [object] = aを上書きします。
この場合、すべてのオブジェクトが表示され、最後のオブジェクト値のみが保存されます。
オブジェクトを検討するときは、次の方法を使用します。
コードコピーは次のとおりです。
for(var i = 0; i <temp.length; i ++){
for(var j = i+1; j <temp.length; j ++){
if(temp [i] === temp [j]){
temp.splice(j、1);
j--;
}
}
}
return temp;
5。配列ソート:ソートメソッド。並べ替えたいオブジェクトがオブジェクトである場合、比較(a、b){if(a.age> b.age)return 1; else return -1;}、a.sort(compare)を書き込むことができます。
6. minは、配列の最小値を返します。
7. Unshiftは、IE6,7の下で配列の長さを返さない。
コードコピーは次のとおりです。
([]。unshift(1)!== 1)//前のアイテムを空の配列に追加する場合、他のブラウザは1を返しますが、IE6と7は配列の長さを返しません。 IFステートメントを実行します
{
var _unshift = array.prototype.unshift; //関数ハイジャック。
array.prototype.unshift = function(){
_unshift.apply(this、arguments);
this.lengthを返します。
}
}
8. 1つのパラメーターの場合、IE8のデフォルトの2番目のパラメーターと次のバージョンは0であり、他のブラウザは配列の長さです。
コードコピーは次のとおりです。
if([1,2,3] .splice(1).length == 0)// ie8および次のバージョンは0に等しく、他のバージョンは3に等しくなります。
{
var _splice = array.prototype.splice;
array.prototype.splice = function(a){
if(arguments.length == 1)//パラメーターが1つしかない場合
{
return _splice.call(this、a、this.length);
}それ以外{
return _splice.apply(これ、引数);
}
}
}
このメソッドは配列のオプションを変更するため、配列のプッシュ、ポップ、シフト、およびアンシフト(これらのメソッドも配列のオプションを変更します)は、このメソッドを呼び出して実装します。
これが注意すべき場所です:
コードコピーは次のとおりです。
var color = new Array( 'Red'、 'Blue'、 'Yellow'、 'Black');
var color2 = color.splice(2,0、 'brown'、 'pink');
アラート(色); //赤、青、茶色、ピンク、黄色、黒、黄色のオプションで、操作を開始します。削除が0の場合、追加オプションが黄色の前に挿入されます。覚えて。
ここでは、スプライスとスライスの違い、戻り値、および元の配列への影響を確認してください。
上記は、このセクションのコンテンツの単純化されたバージョンです。合理化されていますが、重要なポイントはすべてです。このセクションを読むとき、誰にとっても役立つことを願っています。