javaScriptにおける配列オブジェクトのconcat方法を深く理解する
7525 ワード
配列の特性に応じて、そのconcat関数のプロトタイプを作成することができます.
1.ncat方法の基礎紹介
concat法は複数の配列の結合に使用される.新しい配列のメンバを元の配列の末尾に追加し、新しい配列を返します.元の配列は変わりません.
パラメータとして受け入れる配列以外にも、concatはパラメータとして他のタイプの値を受け取ることができる.それらは新しい要素として配列の末尾を追加します.
2.実例から感じるconcat方法
基礎知識を話して、最近出会ったテーマを見せます.原題はこうです.
例を見れば、どういう意味か分かります.
この問題の中の一つの解決策は:
問題:なぜappyを使うかとappyを使わない方法とでは違いがありますか?
しばらくの時間を経て、やっとその違いの原因が分かりました.
まず、私たちが空の配列で例示的な方法concatを呼び出すときは、concatに入ってくるパラメータであり、pushから配列の最後までです.
Javascriptでcall,appy,bind方法の詳細解と要約文では、applyメソッドの役割はcall方法と似ています.また、ある関数の中のthis指向(関数実行時の作用領域)を変えて、指定された作用領域でこの関数を呼び出します.同時に、すぐにこの関数を実行します.唯一の違いは、関数実行時のパラメータとして配列を受信することです.
applyメソッドの最初のパラメータもthisが指す対象であり、nullまたはundefinedまたはthisとすれば、グローバルオブジェクトを指定するのと同じです.第二のパラメータは、パラメータとして配列され、呼び出し時に元の関数に入る.元関数のパラメータは、call法では1つずつ追加しなければなりませんが、appy法では配列で追加する必要があります.
1.単独でconcat方法を使用すると、新しい配列のメンバーを元の配列の末尾に追加し、新しい配列を返します.元の配列は不変です.入力された他のタイプの値が新しい要素として配列の最後に追加されます.
2.配列要素の結合方法:
Array.prototype.concat = function(){
var arr = this.slice(0);
arguments.forEach(fnnction(item){
if(Array.isArray(item)){
item.forEach(function(itemTwo){
arr.push(itemTwo);
})
}
}
else{
arr.push(item);
}
})
}
以下はオンラインの内容で、つまり配列の中のconcatの様々な使い方を深く理解します.原文リンク転送ゲート*concat方法の基礎紹介*実例からconcat方法を感じる1.ncat方法の基礎紹介
concat法は複数の配列の結合に使用される.新しい配列のメンバを元の配列の末尾に追加し、新しい配列を返します.元の配列は変わりません.
console.log([].concat([1],[2],[3])); // [1, 2, 3]
console.log([].concat([[1],[2],[3]])); // [[1], [2], [3]]
console.log([].concat(4,[[5,6],[7]])); // [4, [5, 6], [7]]
上のコードでは、最初の戻り値は1つの空行列を3つの配列[1],[2],[3]を1つの配列に結合するので、[1,2,3]を返します.二つ目は一つの空配列を一つの二次元配列と結合し、二次元配列のメンバは[1],[2],[3]であるので、[1],[2],[3]]を返します.第三の例は同じです.ここでは概念の理解が重要であり、新しい配列のメンバが元の配列の末尾に追加される.パラメータとして受け入れる配列以外にも、concatはパラメータとして他のタイプの値を受け取ることができる.それらは新しい要素として配列の末尾を追加します.
console.log([].concat(1,2,3)); //[1,2,3];
//
console.log([].concat(1,[2,3])); //[1,2,3];
console.log([].concat([1],[2,3])); //[1,2,3];
ここは内容が少ないですが、簡単に見えます.しかし、本当に理解するのは難しいです.2.実例から感じるconcat方法
基礎知識を話して、最近出会ったテーマを見せます.原題はこうです.
例を見れば、どういう意味か分かります.
この問題の中の一つの解決策は:
var flatten = function (arr){
return [].concat.apply([],arr);
};
この簡単な関数は、配列内の要素を結合する機能を実現することができます.しかし、この戻り値を理解しているうちに、問題が発生しました.問題:なぜappyを使うかとappyを使わない方法とでは違いがありますか?
console.log([].concat.apply([],[[1],[2],[3]])); //[1, 2, 3]
console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]
上のコードは、同じ空の配列に新しい配列を追加し、最初に戻るのは[1,2,3]です.二つ目は二次元配列です.しばらくの時間を経て、やっとその違いの原因が分かりました.
まず、私たちが空の配列で例示的な方法concatを呼び出すときは、concatに入ってくるパラメータであり、pushから配列の最後までです.
console.log([].concat(1,2,3)); //[1, 2, 3]
console.log([].concat([1],[2],[3])); //[1, 2, 3]
console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]
console.log([].concat([[[1],[2],[3]]])); // [[[1], [2], [3]]]
上のコードでは、単一要素から一次元配列、二次元配列、三次元配列が徐々に変化します.Javascriptでcall,appy,bind方法の詳細解と要約文では、applyメソッドの役割はcall方法と似ています.また、ある関数の中のthis指向(関数実行時の作用領域)を変えて、指定された作用領域でこの関数を呼び出します.同時に、すぐにこの関数を実行します.唯一の違いは、関数実行時のパラメータとして配列を受信することです.
applyメソッドの最初のパラメータもthisが指す対象であり、nullまたはundefinedまたはthisとすれば、グローバルオブジェクトを指定するのと同じです.第二のパラメータは、パラメータとして配列され、呼び出し時に元の関数に入る.元関数のパラメータは、call法では1つずつ追加しなければなりませんが、appy法では配列で追加する必要があります.
console.log([].concat([1],[2],[3])); //[1, 2, 3]
console.log([].concat([[1],[2],[3]])); //[[1], [2], [3]]
console.log([].concat.apply([],[[1],[2],[3]])); //[1, 2, 3]
上のコードでは、前半は直接にconcat方法を使用して、入力されたパラメータを空の配列に統合します.後半には、Stringオブジェクトを呼び出した例示的な方法applyが、concat()関数内部のthisを[]に指し、[]作用領域においては、concatを呼び出すために必要なパラメータが入力され、配列的に入力される.いくつかの例を見ます.console.log([].concat([1,2,3])); //[1, 2, 3]
console.log([].concat.apply([],[[1],[2],[3]]));//[1, 2, 3]
console.log([].concat([[1],[2],[3]]));//[[1], [2], [3]]
console.log([].concat.apply([],[[[1],[2],[3]]]));//[[1], [2], [3]]
console.log([].concat([[[1],[2],[3]]]));//[[[[1], [2], [3]]]]
console.log([].concat.apply([],[[[[1],[2],[3]]]]));//[[[1], [2], [3]]]
まとめ:1.単独でconcat方法を使用すると、新しい配列のメンバーを元の配列の末尾に追加し、新しい配列を返します.元の配列は不変です.入力された他のタイプの値が新しい要素として配列の最後に追加されます.
2.配列要素の結合方法:
var flatten = function (arr){
return [].concat.apply([],arr);
};
var flatten = function (array){
return array.reduce(function(a,b){
return a.concat(b);
},[])
}