2019-06-11 ES 6はどのように2つの配列を合併します(面接)
1603 ワード
ES 6がどのように2つの配列を合併するかという面接問題に遭遇しましたが、実は簡単です.ここで覚えておきます.
例:
2つの配列a,bがあり、2つの配列を1つにまとめる必要がある.方法は次のとおりです.
1、concat
jsのArrayオブジェクトにはconcat()というメソッドがあり、2つ以上の配列を接続し、結果を返します.
ここで、concatメソッドがa、bの2つの配列を接続すると、a、bの2つの配列のデータは変わらず、新しい配列が返されるという問題があります.これにより、配列のマージを複数回行う必要がある場合、メモリの浪費が大きいため、この方法は最善ではありません.
2、forサイクル
大まかな考え方は、1つの配列を巡り、その配列のすべての要素を別の配列に順次追加することです.直接コード:
このような書き方は、最初の方法でメモリの浪費を解決することができますが、もう一つの問題があります.醜い!そう言うのは無理ではありませんが、1行のコードで済むなら、不快ではありませんか.
また、2つの小さな問題に注意してください.
1)以上の2つのマージ方法は,a,bの2つの配列のどちらの長さが小さいかを考慮していない.
したがって、a、bの2つの配列のどちらが大きいかを事前に判断し、大きな配列を使用して小さな配列をマージすることで、配列要素の操作回数を減らすことができます.
2)元の配列(a,b)を変更したくない場合があり,concatしか使用できない.
以下はES 6で配列をマージする書き方です
1.拡張演算子は、配列の結合の新しい書き方を提供します.
例:
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 ,
// , 。 , 。