[英]Using forEach to iterate an array, add to object and use the forEach index for the object key doesn't work
我想使用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}
为什么是这样? 任何帮助是极大的赞赏! 😀
问题是因为您使用变量作为属性名称。 在这种情况下,您不能使用点表示法,而必须使用括号表示法来访问对象。
当前仅在对象中看到一项的原因是,您仅设置了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);
使用testObj[objectKeyName] = value
代替testObj.objectKeyName = value
。 点表示法从字面上分配键值。
解决方案在这里
var myArray = [123, 15, 187, 32]; var testObj = {} myArray.forEach(function(value, i) { testObj["item" + i] = value; }); console.log(testObj);
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);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.