2017-07-11 44 views
1

我想使用forEach迭代数组,然后将该数组的值添加到对象。使用forEach迭代数组,添加到对象并使用forEach索引的对象键不起作用

添加到对象时,我希望能够使用增加的数字来命名对象键,就像使用i变量计数器使用正常的for loop一样。

与下面的代码:

var myArray = [123, 15, 187, 32]; 
var testObj = {} 
myArray.forEach(function (value, i) { 
    console.log('%d: %s', i, value); 
    var objectKeyName = "item" + i; // ⬅️ here 
    testObj.objectKeyName = value; 
}); 
console.log(testObj); 

我希望testObj

{ 
    item0: 123, 
    item1: 15, 
    item2: 187, 
    item3: 32, 
} 

而是输出:

{objectKeyName: 32} 

这是为什么? 任何帮助,非常感谢!

回答

4

问题是因为您正在使用变量作为属性名称。在这种情况下,您不能使用点符号,而必须使用括号符号来访问该对象。

当前在对象中只看到一个项目的原因是因为您只设置了objectKeyName属性,并在forEach的每次迭代中覆盖它。

var myArray = [123, 15, 187, 32]; 
 
var testObj = {} 
 
myArray.forEach(function(value, i) { 
 
    var objectKeyName = "item" + i; 
 
    testObj[objectKeyName] = value; // Note the [] surrounding the variable name here 
 
}); 
 
console.log(testObj);

+0

啊啊啊我明白了。所以,如果你使用变量的括号表示法来添加/更新对象属性值!多谢,伙计! – Ash

+1

就是这样。很高兴帮助 –

1

使用testObj[objectKeyName] = value而不是testObj.objectKeyName = value。点符号字面上指定键值。

+0

谢谢队友!那很棒! :d – Ash

1

在这里,你去与解决方案

var myArray = [123, 15, 187, 32]; 
 
var testObj = {} 
 
myArray.forEach(function(value, i) { 
 
    testObj["item" + i] = value; 
 
}); 
 
console.log(testObj);

1
var myArray = [123, 15, 187, 32]; 
var testObj = []; 
myArray.forEach(function (value, i) { 
    console.log('%d: %s', i, value); 
    var objectKeyName = "item" + i; // ⬅️ here 
    testObj.push(objectKeyName + ":" + value); 
}); 
console.log(testObj); 
testObj.forEach(function (value, i) { 
    console.log(value); 
}); 
相关问题