2016-07-11 24 views
0

我使用節點殼來測試這一點:BTW,我是新來的JavascriptJavaScript的push方法改變值

x = [1,2] 
y = [3,4] 
k = [] 
for (n in x.concat(y)) { k.push(n); } 

現在打字ķ打印以下內容:

[ '0', '1', '2', '3' ] 
+1

'K = x.concat(Y)' –

+0

什麼是預期的輸出?它是'[1,2,3,4]'?順便說一下'n'是指數,而不是價值。這就是爲什麼你看到'0 ... n-1'。 –

+0

'for..in'不是'foreach';不完全是。也許你理解結果,如果你嘗試'x = [7,8],y = [6,5]' – Thomas

回答

0

你推索引,而不是實際的元素。嘗試是這樣的:

var x = [1,2]; 
var y = [3,4]; 
var k = []; 

var z = x.concat(y); 
for (var n in z) { 
    k.push(z[n]); 
} 

更多在這裏閱讀:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

+1

**不能保證...將以任何特定順序返回索引。 ** – paradite

+0

@paradite這有什麼不同? – Brad

+1

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...in#Array_iteration_and_for...in – paradite

3

沒有必要的for循環都簡單地分配Array#concat方法的返回值,這是級聯陣列。

var k = x.concat(y) 

FYI:for...in循環你拿到鑰匙,萬一這將是數組索引。它旨在用於對象迭代。改爲使用simple for loop。即使Array#mapArray#forEach可以使用,根據您的要求。

Array#forEach一個例子:

a.concat(b).forEach(function(e){ 
    k.push(e); 
}); 

在情況下,如果您要推送的值的陣列,以現有陣列然後使用Array#pushFunction#apply方法。

[].push.apply(existingArray, arrayOfValuesToPush); 

你的情況,那就是:

[].push.apply(k, a.concat(b)); 
// or 
[].push.apply(k, a); 
[].push.apply(k, b); 
+0

顯然,這個人知道如何使用'concat',因爲'concat'在代碼本身中...'for ... in'是這裏所討論的。 – Brad

+0

那麼,如果我想追加到現有的列表k呢? – Misgevolution

+0

@Misgevolution:在這種情況下,使用'[] .push.apply(K,A)',其中'k'是現有陣列和'A'是要連接 –

1

您需要參考的元素,而不是數組的索引的

for (n in _m=x.concat(y)) { 
k.push(_m[n]); 
} 

JSFIDDLE

+0

優於在較高的範圍聲明該對象陣列。謝謝! – Misgevolution

1

您使用數據結構上的一個for...in循環通常不會與ke一起運行y /值對。

所以實際發生的是在for...in循環的每次迭代中,您將索引傳遞給n並將該索引推送到新數組。

你可能想要的實際上是forEach method native to arrays

從而改變你的代碼是這樣的......

​​

也有在Array.map方法還原產於實際上將產生一個全新的陣列(而不是你不必定義kpush陣列到它。

var x = [1,2]; 
var y = [3,4]; 

var k = x.concat(y).map(function(element, index) { 
// the return value is the element that will be at the 
// new array's index. 
return element; 
} 
+0

不錯!我不知道forEach的存在。 – Misgevolution

+0

我還爲地圖添加了一個示例!哪些會達到同樣的效果,但更簡潔一點:) – Morklympious

0

試試這個(在ES5):

var k = x.concat(y); 

試試這個(在ES6):

for (let n of x.concat(y)) { 
    k.push(n); 
} 
+0

有人已在20分鐘前發佈該答案。 –

+0

是的,我向他提供簡短和簡單的答案,而不會混淆到幾件事情。 – Jain