繁体   English   中英

将属性分配给数组中的 object

[英]assign property to object in array

我知道有很多这样的问题,这可能是重复的,但可以肯定的是,我尝试了为这些问题提供的每一个解决方案,但没有一个对我有用。

事情是这样的:

我有一个对象数组:

let data = [
  {
    id: 1,
    year: 2022,
    month: 11,
    currentCount: 2460.9,
  },
  {
    id: 2,
    year: 2022,
    month: 9,
    currentCount: 2481.4,
  },
  {
    id: 3,
    year: 2022,
    month: 2,
    currentCount: 2521.1,
  }
]

我想遍历数组并为每个 object 添加一个新属性。我尝试了很多不同的方法(forEach、for-loop 等),但我最近的尝试是这个:

data.map((item, index) => {
    if (prevCount === undefined) {
        //do some things here
    } else {

        //do some things here

        //the new property i want to add
        let newProperty = "foo"
        
        //some methods i tried
        item.newProperty = "foo"
        item[newProperty] = "foo"

        let obj = {newProperty: "foo"}
        let newObj = Object.assign(item, obj)

        //do some things here
    }
})

但最终什么也没有发生。 没有错误,也没有新属性。 我对这个有点疯狂,因为它看起来很简单......

任何帮助表示赞赏

编辑

将 map 更改为:

let newData = dataElec.map((item, index) => {
    if (prevCount === undefined) {
        prevCount = item.currentCount
        return item
    } else {
        let meter = {foo: 'bar'}
        return {...item, meter}
    }
})

它有点工作,但我得到一个奇怪的 object 结构: 控制台中数组的屏幕截图

我的代码未添加 object 和属性(第一个红色框)。 我不知道他们来自哪里。 object“_doc”(第二个红框)的内容/属性应与“仪表”object 在同一级别。

我可以使用这样的结构,但我想要一个干净的数组。 我想知道其他对象是如何进入我的数组的……

再次感谢您的帮助。 谢谢

prevCount可能存在问题。 除此之外,你做对了。 尝试在map调用后记录data 但是,当直接修改数组中的项目时,请使用 forEach 而不是 map。

data.forEach(item => {
  item.foo = 'bar'
})

如果您想要一个已更改内容的重复数组,请使用 map。 这将返回一个新数组,其中每个 object 添加了键“foo”。

data.map(item => {
  return { ...item, foo: 'bar' }
})
let data = [
  {
    id: 1,
    year: 2022,
    month: 11,
    currentCount: 2460.9,
  },
  {
    id: 2,
    year: 2022,
    month: 9,
    currentCount: 2481.4,
  },
  {
    id: 3,
    year: 2022,
    month: 2,
    currentCount: 2521.1,
  }
];
data = data.map((item, index) => {return {...item,foo:"bar"}})
console.log(data);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM