如何使用新字段重命名对象中的文件或将其数据提取到其他对象?

时间:2018-10-05 10:51:03

标签: javascript reactjs

我在这里找不到答案,所以请不要写重复的答案! 我的问题如下。我有一个带有对象的数组:

Items: [

        {  groups: [{…}]
          id: 1
          name: "Test Name"
          _test: null
          _test2: 0.02867696
        },
        {  groups: [{…}]
          id: 2
          name: "Test Name2"
          _test: null
          _test2: 0.02867696
        },
  ]

我需要更改每个对象字段的名称,例如ID,名称为topicId和topicName。我需要保留其余数据,并返回包含更改后的对象的数组。
我写了这样一个函数来访问每个对象:

function changeFields(data) {
  for (const key of Object.keys(data)) {
    data[key].map(item => {

    })
  }
}

但是我不知道下一步该怎么做。

2 个答案:

答案 0 :(得分:0)

您可以使用数组的map方法来修改每个条目并重新分配。

let Items = [
  {
    groups: [
      1, 2
    ],
    id: 1,
    name: "Test Name",
    _test: null,
    _test2: 0.02867696
  }, {
    groups: [
      1, 2
    ],
    id: 2,
    name: "Test Name2",
    _test: null,
    _test2: 0.02867696
  }
]

Items = Items.map(item => ({
  group : item.group,
  topicId : item.id,
  topicName : item.name,
  _test : item._test,
  _test2 :item._test2
}))

或者您在数组中有很多字段,而只想更改一个或两个字段,则可以编写如下一般解决方案:

Items = Items.map(item => {
  let obj = {};

  //Loop trough each fields of item
  Object.keys(item).filter(key => {
    switch (key) {

      //Fields to be changed
      case 'id':
        obj['topicId'] = item['id']
        break;
      case 'name':
        obj['topicName'] = item['name']
        break;
      //End

      //Rest will be the same
      default:
        obj[key] = item[key]
    }
  })
  //Return modified obj
  return obj;
})

答案 1 :(得分:0)

根据您的问题,您正在尝试修改array中现有的objects。下面是伪步骤

  1. 使用map或任何等效方法遍历数组
  2. 克隆对象
  3. 将具有所需键的新属性添加到克隆对象中,其值将是与现有键关联的值
  4. 从对象中删除旧键

下面是您的数据的示例代码,在该代码中,我正在将密钥id修改为_id

var data = [
        {  
          groups: [{}],
          id: 1,
          name: "Test Name",
          _test: null,
          _test2: 0.02867696
        },
        {  
          groups: [{}],
          id: 2,
          name: "Test Name2",
          _test: null,
          _test2: 0.02867696
        }
  ];
var modifiedData = data.map((item) => { 
  let _item = Object.assign(item, {});
  _item['_id'] = item['id'];
  delete _item['id'];
  return _item;
});

console.log(modifiedData);