我想使用forEach
迭代数组,然后将该数组的值添加到对象中。
添加到对象时,我希望能够以越来越多的数字命名对象键,就像使用for loop
变量计数器使用普通i
时一样。
使用以下代码:
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}
这是为什么? 任何帮助是极大的赞赏!
答案 0 :(得分: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);
答案 1 :(得分:1)
使用testObj[objectKeyName] = value
代替testObj.objectKeyName = value
。点符号按字面分配键值。
答案 2 :(得分:1)
您可以使用解决方案
var myArray = [123, 15, 187, 32];
var testObj = {}
myArray.forEach(function(value, i) {
testObj["item" + i] = value;
});
console.log(testObj);
答案 3 :(得分: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);
});