JavaScript 根据条件重命名对象键

问题描述 投票:0回答:1

我有一个对象数组:

const arr = [{
    "id": "1",
    "operation": "ADD"
  },
  {
    "id": 2,
    "idmuFlag": "Mercedes",
    "operation": "DELETE"
  },
  {
    "id": 3,
    "idm": "Toyota",
    "operation": "UPDATE",
    "idmuFlag": "Ford"
  },
  {
    "id": 4,
    "idmuFlag": "Bently",
    "operation": "DELETE"
  },
  {
    "id": 5,
    "idm": "Skoda",
    "operation": "UPDATE",
    "idmuFlag": "Mustang"
  }
]

const arr1 = arr.map(arrObj => {
  if (arrObj.operation.toLowerCase() === 'delete') {
    const obj = { ...arrObj,
      idm: arrObj.idmuFlag
    }
    delete obj.idmuFlag;
    return obj;
  }
  if (arrObj.operation.toLowerCase() === 'update') {
    const obj = { ...arrObj,
      idmNew: arrObj.idmuFlag
    }
    delete obj.idmuFlag;
    return obj;
  }
  return arrObj;
});
console.log(arr1);

我想根据操作字符串值更新键名称(

UPDATE
/
DELETE
)。我不想经历
for loop
,重命名它。我想以 ES6/ES7 方式或使用解构来实现,但不确定。

所以,如果操作是

DELETE
,则重命名为
idmuFlag
=>
idm
UPDATE
,重命名
idmuFlag
=>
idmNew

我正在将值分配给新键并删除旧键。我们可以直接重命名键吗?

javascript typescript javascript-objects
1个回答
1
投票

您可以创建一个映射(即:对象),将操作(在您的情况下为删除和更新)关联到新的预期键值。如果当前对象的操作不在该映射中,那么您可以返回当前对象,因为不需要进行任何更改。否则,如果操作在映射中,您可以获取关联的新键,然后使用该键返回新对象,使用解构来删除

idmuFlag
:

const arr = [{ "id": "1", "operation": "ADD" }, { "id": 2, "idmuFlag": "Mercedes", "operation": "DELETE" }, { "id": 3, "idm": "Toyota", "operation": "UPDATE", "idmuFlag": "Ford" }, { "id": 4, "idmuFlag": "Bently", "operation": "DELETE" }, { "id": 5, "idm": "Skoda", "operation": "UPDATE", "idmuFlag": "Mustang" } ];

const operationMap = {DELETE: "idm", UPDATE: "idmNew"};
const res = arr.map(obj => {
  const op = obj.operation;
  if (!(op in operationMap)) return obj;
  const {idmuFlag, ...rest} = obj;
  const key = operationMap[op];
  return {...rest, [key]: idmuFlag};
});
console.log(res);

© www.soinside.com 2019 - 2024. All rights reserved.