【问题标题】:forEach/map on array of objects does not add properties对象数组上的 forEach/map 不添加属性
【发布时间】:2019-03-14 16:08:14
【问题描述】:

我有一个对象数组。我想为该数组中的所有对象添加两个新属性。 对象在数组中的位置和数组的长度。

我的代码是:

 objArr.forEach(function(element) {
        element.data.basics.all= objArr.length, 
        element.data.basics.position= objArr.indexOf(element), 
    });

在 forEach 循环中添加了属性。我可以在循环中打印它们。但是在循环完成后,属性就消失了。

如果尝试过Add property to an array of objects,但 forEach 和 .map 都不起作用。

我也试过了:

 objArr.forEach(function(element) {
        element.data.basics.all= objArr.length, 
        element.data.basics.position= objArr.indexOf(element), 
        return element
    });

 objArr.map(function(element) {
   element.data.basics.position = objArr.indexOf(element)
       element.data.basics.all= objArr.length, 
        return element;
     }
 )

我在所有情况下都尝试了箭头函数,所以 `...objArr.forEach((element)=>{...})

【问题讨论】:

  • “循环结束后”究竟是什么意思? forEach 的更大背景是什么?也不需要.indexOf(element).forEach() 回调的第二个参数是数组的索引,所以你可以使用它。
  • off-topic:forEach 的第二个参数是元素的索引,所以你不需要objArr.indexOf(element)
  • 返回forEach 没有任何意义。而且您发布的代码看起来也不错。你应该发布更多代码
  • 请加objArr
  • 使用您的代码,以及我假设您的对象结构的样子,我得到{ all: 1, position: 0 },其中一个元素位于objArr...let objArr = [{ data: { basics: { all: 0, position: -1 } } }]

标签: javascript arrays object foreach


【解决方案1】:

它与 forLoop 一起工作正常,添加了新属性。

var array = [
        { person: { age: 76 }, state: 'ka' },
        { person: { age: 87 }, state: 'ap' },
        { person: { age: 45 }, state: 'tn' }
    ];
    array.forEach(function(element, index){
        element.person.length = array.length;
        element.person.index = index;
    });
    console.log(array)

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 2021-03-22
    • 2011-11-09
    • 1970-01-01
    • 2022-08-08
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多