使用forEach迭代数组,添加到对象并使用forEach索引对象键不起作用

时间:2017-07-11 15:28:38

标签: javascript jquery

我想使用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}

这是为什么? 任何帮助是极大的赞赏!

4 个答案:

答案 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);
});