2017-02-15 62 views
-1

有人可以幫助我將數組連接到另一個屬於javascript對象的數組嗎?到目前爲止,我曾嘗試:如何在一個對象中連接javascript數組

var someObj = {}; 
someObj.someArray = ['1', '2', '3', '4']; 

var randomArray = ['5', '6', '7'] 


someObj.someArray.concat(randomArray); 

console.log(someObj); 

不過,最後的對象包含原始數組,而不是原始數組與randomArray concated。

這裏是我的小提琴:

http://jsfiddle.net/d8md3r7a/

+5

'someObj.someArray = someObj.someArray.concat(randomArray);' –

+1

注意,在下面的 「推」 的答案有一個限制,即'randomArray'不能超過500000的長度,將導致在'RangeError:太多的函數參數'錯誤(在Firefox中,其他瀏覽器可能有不同的限制)當然,50萬是很多,但它仍然是一個限制,不適用於在 –

+0

以下答案concat方法爲什麼?你從來沒有用過這麼大的數組?我會定期 - 你的手柄@Kinduser似乎很諷刺 –

回答

3

看看在MDN documentationArray.prototype.concat

The concat() method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array. (Emphasis mine)

正如你所看到的,方法實際上並沒有改變數組到位。新的陣列是從方法返回,所以你需要分配到返回數組,像這樣:

someObj.someArray = someObj.someArray.concat(randomArray); 
1

Array.concat()不修改原有的數組,但返回連接結果。您需要使用返回值Array.concat()來顯式設置原始對象屬性。更新你的小提琴here

1

你可以這樣做,而不是.concat()

var someObj = {}; 
 
someObj.someArray = ['1', '2', '3', '4']; 
 
var randomArray = ['5', '6', '7'] 
 

 
randomArray.forEach(v => someObj.someArray.push(v)); 
 
    
 
console.log(someObj);

+0

不知道爲什麼會有這樣的downvotes,至少這將工作,無論'randomArray'大小(不像'push。應用'或'推(... arg)'答案) –

+0

@JaromandaX謝謝xd –

1

concat使得一個新的數組,並且用於這樣

someObj.someArray = someObj.someArray.concat(randomArray); 

另一種方法是通過插入另外的元件來修改代替陣列。爲了做到這一點,與Function.apply這樣一起使用push

[].push.apply(someObj.someArray, randomArray); 

Function.apply採用兩個參數,第一是this值和第二個是用於填充在該函數的參數的陣列。這裏,Function.apply導致將randomArray的元素作爲(多個)參數從數組中解壓到push函數,而不是將整個數組作爲單個元素推入。 []是創建一個空數組以獲取推送功能的技巧,而不是更詳細的someObj.someArray.pushArray.prototype.push

0

迴應上面的答案。使用.concat()方法絕對是一種可行的方式。你也可以使用ES6擴展運算符,它可以像push和concat一樣使用。這會給你你正在尋找的結果。

var someObj = {}; 
someObj.someArray = ['1', '2', '3', '4']; 

var randomArray = ['5', '6', '7'] 


someObj.someArray.push(...randomArray); 

console.log(someObj); 
相關問題