2019-06-11 ES 6はどのように2つの配列を合併します(面接)

1603 ワード

ES 6がどのように2つの配列を合併するかという面接問題に遭遇しましたが、実は簡単です.ここで覚えておきます.
例:
var a = [1,2,3];

var b = [4,5,6];

2つの配列a,bがあり、2つの配列を1つにまとめる必要がある.方法は次のとおりです.
1、concat
jsのArrayオブジェクトにはconcat()というメソッドがあり、2つ以上の配列を接続し、結果を返します.
var c = a.concat(b);//c=[1,2,3,4,5,6]


ここで、concatメソッドがa、bの2つの配列を接続すると、a、bの2つの配列のデータは変わらず、新しい配列が返されるという問題があります.これにより、配列のマージを複数回行う必要がある場合、メモリの浪費が大きいため、この方法は最善ではありません.
2、forサイクル
大まかな考え方は、1つの配列を巡り、その配列のすべての要素を別の配列に順次追加することです.直接コード:
for(var i in b){
    a.push(b[i]);
}


このような書き方は、最初の方法でメモリの浪費を解決することができますが、もう一つの問題があります.醜い!そう言うのは無理ではありませんが、1行のコードで済むなら、不快ではありませんか.
また、2つの小さな問題に注意してください.
1)以上の2つのマージ方法は,a,bの2つの配列のどちらの長さが小さいかを考慮していない.
したがって、a、bの2つの配列のどちらが大きいかを事前に判断し、大きな配列を使用して小さな配列をマージすることで、配列要素の操作回数を減らすことができます.
2)元の配列(a,b)を変更したくない場合があり,concatしか使用できない.
以下はES 6で配列をマージする書き方です
1.拡張演算子は、配列の結合の新しい書き方を提供します.

formatEs6ConcatArr () {
  let arr1 = ['a', 'b']
  let arr2 = ['c', 'c']
  let arr3 = ['d', 'e']
  // ES5      
  // arr1.concat(arr2, arr3)
  // [ 'a', 'b', 'c', 'd', 'e' ]
  // ES6      
  let arr4 = [...arr1, ...arr2, ...arr3]
  console.log('arr4=', arr4)
  // [ 'a', 'b', 'c', 'd', 'e' ]
  //   ,          ,         。
  const a1 = [{foo: 1}]
  const a2 = [{bar: 2}]
  const a3 = a1.concat(a2)
  const a4 = [...a1, ...a2]
  console.log(a3[0] === a1[0])// true
  console.log(a4[0] === a1[0])// true

}
//      ,a3 a4                ,
//                  ,      。           ,         。