JavaScript推送方法更改值

时间:2016-07-11 05:05:13

标签: javascript node.js

我正在使用Node shell来测试这个:BTW,我是Javascript的新手

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

现在输入k会打印以下内容:

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

5 个答案:

答案 0 :(得分:3)

根本不需要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);

答案 1 :(得分:1)

您需要引用元素而不是数组的索引

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

JSFIDDLE

答案 2 :(得分:1)

您在通常不使用键/值对操作的数据结构上使用for...in循环。

所以实际发生的事情是在for...in循环的每次迭代中,您将索引传递给n并将该索引推送到新数组。

您可能想要的实际上是forEach method native to arrays

将您的代码更改为此类内容......

var x = [1,2];
var y = [3,4];
var k = [];
x.concat(y).forEach(function(element, index) {
 k.push(element);
}

还有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; 
}

答案 3 :(得分: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

答案 4 :(得分:0)

试试这个(在ES5中):

var k = x.concat(y);

试试这个(在ES6中):

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