【问题标题】:Javascript function to modify the array of objects reuturns the same array修改对象数组的Javascript函数返回相同的数组
【发布时间】:2022-01-13 12:32:25
【问题描述】:

我的数组中有一个数据,如下所示。

const arr = [
  {
  devSth: {
    h1: [1],
    h2: [1],
  }
 },
];

我有一个函数,它应该修改这个数组。它看起来像这样:

const modifyArr = (data) => {
 data.forEach(el => {
  let keys = el.devSth && Object.keys(el.devSth);
  keys.forEach(key => {
    el.devSth[key].map(el => {
    return {
    name: el,
    val: 'lalala'
    }
    })
  })
})
return data;
}

然后我正在使用我的功能:

const newArr = modifyArr(arr);
console.log(newArr);

预期输出:

[{
  devSth: {
    h1: [{name: 1, val: 'lalala'}],
    h2: [{name: 1, val: 'lalala'}]
  }
}]

实际输出:

[{
  devSth: {
    h1: [1],
    h2: [1]
  }
}]

不胜感激。

【问题讨论】:

  • 您没有将.map 结果分配给任何东西。 .map 不会原地修改,而是返回一个新数组。

标签: javascript arrays dictionary


【解决方案1】:

您正在映射值,但没有设置它们(第 5 行):

const modifyArr = (data) => {
 data.forEach(el => {
  let keys = el.devSth && Object.keys(el.devSth);
  keys.forEach(key => {
    el.devSth[key] = el.devSth[key].map(el => {
    return {
    name: el,
    val: 'lalala'
    }
    })
  })
})
return data;
}

这是未经测试的。

【讨论】:

  • 工作,谢谢。我错过了
【解决方案2】:

您没有将.map 操作的结果分配回原始键h1h2。所以它不会修改那些。

只是改变

            el.devSth[key].map(el => {
                return {
                    name: el,
                    val: 'lalala'
                }
            })

            el.devSth[key] = el.devSth[key].map(el => {
                return {
                    name: el,
                    val: 'lalala'
                }

const arr = [{
  devSth: {
    h1: [1],
    h2: [1],
  }
}, ];

const modifyArr = (data) => {
  data.forEach(el => {
    let keys = el.devSth && Object.keys(el.devSth);
    keys.forEach(key => {
      el.devSth[key] = el.devSth[key].map(el => {
        return {
          name: el,
          val: 'lalala'
        }
      })
    })
  })
  return data;
}

const newArr = modifyArr(arr);
console.log(newArr);

【讨论】:

  • 谢谢,刚刚错过)
【解决方案3】:

另一种方法:

const arr = [{
  devSth: {h1: [1], h2: [1]}
}];

let obj = arr[0].devSth, number;

for (const prop in obj){
  number = obj[prop][0];
  obj[prop] = [{name: number, val: 'lalala'}];
}

console.log([{devSth: obj}])

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2020-01-12
    • 2016-03-22
    • 2014-04-21
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多