我使用節點殼來測試這一點:BTW,我是新來的JavascriptJavaScript的push方法改變值
x = [1,2]
y = [3,4]
k = []
for (n in x.concat(y)) { k.push(n); }
現在打字ķ打印以下內容:
[ '0', '1', '2', '3' ]
我使用節點殼來測試這一點:BTW,我是新來的JavascriptJavaScript的push方法改變值
x = [1,2]
y = [3,4]
k = []
for (n in x.concat(y)) { k.push(n); }
現在打字ķ打印以下內容:
[ '0', '1', '2', '3' ]
你推索引,而不是實際的元素。嘗試是這樣的:
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
沒有必要的for循環都簡單地分配Array#concat
方法的返回值,這是級聯陣列。
var k = x.concat(y)
FYI:在for...in
循環你拿到鑰匙,萬一這將是數組索引。它旨在用於對象迭代。改爲使用simple for loop。即使Array#map
或Array#forEach
可以使用,根據您的要求。
與Array#forEach
一個例子:
a.concat(b).forEach(function(e){
k.push(e);
});
在情況下,如果您要推送的值的陣列,以現有陣列然後使用Array#push
與Function#apply
方法。
[].push.apply(existingArray, arrayOfValuesToPush);
你的情況,那就是:
[].push.apply(k, a.concat(b));
// or
[].push.apply(k, a);
[].push.apply(k, b);
顯然,這個人知道如何使用'concat',因爲'concat'在代碼本身中...'for ... in'是這裏所討論的。 – Brad
那麼,如果我想追加到現有的列表k呢? – Misgevolution
@Misgevolution:在這種情況下,使用'[] .push.apply(K,A)',其中'k'是現有陣列和'A'是要連接 –
優於在較高的範圍聲明該對象陣列。謝謝! – Misgevolution
您使用數據結構上的一個for...in
循環通常不會與ke一起運行y /值對。
所以實際發生的是在for...in
循環的每次迭代中,您將索引傳遞給n並將該索引推送到新數組。
你可能想要的實際上是forEach
method native to arrays。
從而改變你的代碼是這樣的......
也有在Array.map
方法還原產於實際上將產生一個全新的陣列(而不是你不必定義k
和push
陣列到它。
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;
}
不錯!我不知道forEach的存在。 – Misgevolution
我還爲地圖添加了一個示例!哪些會達到同樣的效果,但更簡潔一點:) – Morklympious
試試這個(在ES5):
var k = x.concat(y);
試試這個(在ES6):
for (let n of x.concat(y)) {
k.push(n);
}
有人已在20分鐘前發佈該答案。 –
是的,我向他提供簡短和簡單的答案,而不會混淆到幾件事情。 – Jain
'K = x.concat(Y)' –
什麼是預期的輸出?它是'[1,2,3,4]'?順便說一下'n'是指數,而不是價值。這就是爲什麼你看到'0 ... n-1'。 –
'for..in'不是'foreach';不完全是。也許你理解結果,如果你嘗試'x = [7,8],y = [6,5]' – Thomas