2016-02-26 16 views
2

Java集合有一種方法來添加另一個集合的所有元素:addAll(Collection other)JavaScript數組的Java`Collection.addAll`等價於什麼?

在javascript數組添加的地方做什麼等效?

我們不能使用Array.concat,因爲它會創建一個新的數組,並保持原始數組不變。

因此,考慮到兩個數組,如何ba,如何的b所有元素追加到a到位(因此c也改變!):

var a = [1, 2, 3]; 
var b = ['foo', 'bar']; 
var c = a; 
// a.addAll(b); 
// so that `c` equals to [1, 2, 3, 'foo', 'bar'] 

回答

6

您可以使用Array.prototype.push()apply方法:

var a = [1, 2, 3]; 
var b = ['foo', 'bar']; 
Array.prototype.push.apply(a, b); 
console.log(a); // Array [ 1, 2, 3, "foo", "bar" ] 

或者:

a.push.apply(a, b); 
[].push.apply(a, b); 

如果您使用的是ES6,最好使用the spread operator ...來代替,請撥打.push()。這更類似於Collection.addAll(...),因爲您可以從任何iterable object添加值,而不僅僅是數組。它還允許您一次添加多個迭代。

const a = [1, 2, 3]; 
const b = ['foo', 'bar']; 
const c = new Set(['x', 'x', 'y', 'x']); 
a.push(...b, ...c); 
console.log(a); // Array [ 1, 2, 3, "foo", "bar", "x", "y" ] 
+0

但是'a = a.concat(b)'怎麼辦? –

+2

@ A.Wolff這是一個非常不同的操作 - 這擴展了現有的數組,創建了一個新的數組。 –

+0

你也可以使用'a.push.apply(a,b);'。 – Andy