在 JavaScript 中,将数组对象中的 enable 字段转换为 disabled 字段(即删除旧键、添加新键并保留原值),最推荐的方式是使用 map 方法结合解构赋值。这种方式不会修改原数组,而是返回一个新的数组,符合函数式编程的最佳实践。
以下是几种常用的实现方式:
例如:
let list = [
{
"enable": true,
"key": "11111111",
"name": "黄金糕"
},
{
"enable": false,
"key": "33333333",
"name": "龙须面"
},
{
"enable": true,
"key": "22222222",
"name": "北京烤鸭"
}
];
转换结果:
let list = [
{
"disabled": true,
"key": "11111111",
"name": "黄金糕"
},
{
"disabled": false,
"key": "33333333",
"name": "龙须面"
},
{
"disabled": true,
"key": "22222222",
"name": "北京烤鸭"
}
]
方法一:使用 map 和解构赋值(推荐)
这种方法代码简洁,且能确保生成全新的对象,避免引用污染。
// 转换逻辑
list = list.map(item => {
// 从 item 中解构出 enable,其余属性放入 rest
const { enable, ...rest } = item;
// 返回新对象,将 enable 的值赋给 disabled
return {
disabled: enable,
...rest
};
});
console.log(list);
方法二:使用 forEach 原地修改
直接修改原数组对象(不创建新数组),可以使用 forEach。注意这会改变原始数据。
list.forEach(item => {
// 将 enable 的值赋给 disabled
item.disabled = item.enable;
// 删除 enable 属性
delete item.enable;
});
方法三:通用封装函数
如果项目中经常需要重命名字段,可以封装一个通用工具函数:
/**
* 重命名数组中对象的某个键
* @param {Array} arr - 目标数组
* @param {String} oldKey - 旧键名
* @param {String} newKey - 新键名
*/
function renameKeyInArray(arr, oldKey, newKey) {
return arr.map(item => {
if (item.hasOwnProperty(oldKey)) {
const { [oldKey]: value, ...rest } = item;
return { [newKey]: value, ...rest };
}
return item;
});
}
// 使用
list = renameKeyInArray(list, 'enable', 'disabled');
总结:
- 推荐使用 map + 解构:安全、不可变数据流、代码清晰。
- 注意:delete 操作在某些 JavaScript 引擎中可能会影响对象的性能优化(隐藏类变更),因此在高性能场景下,创建新对象(方法一)通常优于删除属性(方法二)。