私の別の質問では、誰かがn番目のネストされた配列を1つの配列に平坦化する方法について本当にクールなソリューションを投稿しました。私は長いチャットを始めたいとは思っていなかったので、このコードが何をしているかをまだ十分に理解していないので、私は尋ねると思った。配列の理解コードを平坦化
私の印象は、この場合、配列の長さが2で、whileループでは1になります。次に、array[1]
が配列であることを確認します。それで私たちは進めます。ここで私はちょっと混乱しているところです。ネストされた配列に入るためにflatten
関数を再度呼び出すと信じていますが、私はまだ推論にはぼんやりしています。その後、array[1]
をスライスしてスライスしますが、ここではスライシングしないと、とにかくarray[l]
全体が得られますか? slice()
にはパラメータがないので、0番目の位置から最後に移動するためです。
function flatten(array) {
var l = array.length, temp;
while (l--) {
if (Array.isArray(array[l])) {
flatten(array[l]);
temp = array[l].slice();
temp.unshift(1);
temp.unshift(l);
[].splice.apply(array, temp);
}
}
}
var array = [['1', '2', '3'], ['4', '5', ['6'], ['7', '8']]];
flatten(array);
console.log(array);
https://jsfiddle.net/curw7mdp/
いいえ、配列の長さは3から始まり、ループの各反復は、それをデクリメントします。 [] .spliceは単独では何もしません。あなたはapplyメソッドを読み上げなければなりません。それは非常に奇妙な構文ですが、私はそれを説明する最良の方法は不明です。 – master565
私の謝罪。はい、その2要素配列です。私はそれを誤解しています。 – master565
また、apply関数にも関連しています。スプライスは配列で動作するメソッドなので、[]はその関数を呼び出す空の配列です。 – master565