我有一个对象数组:
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
。
我正在将值分配给新键并删除旧键。我们可以直接重命名键吗?
您可以创建一个映射(即:对象),将操作(在您的情况下为删除和更新)关联到新的预期键值。如果当前对象的操作不在该映射中,那么您可以返回当前对象,因为不需要进行任何更改。否则,如果操作在映射中,您可以获取关联的新键,然后使用该键返回新对象,使用解构来删除
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);