JavaScript中重命名对象数组内指定键名的最高效方法是什么?
原代码问题说明
你现有写法首先存在大小写不匹配的问题:原数组对象的键是大写开头的Name和Age,你写的item.name、item.age会读取到undefined,需要先修正大小写对应。
效率更高的实现方案
效率最高的实现是原地修改原数组内的对象,不需要额外创建新数组和新对象,内存开销和执行耗时都比你当前用map新建数组的方式更低,示例代码如下:
// 遍历直接修改原对象,10条数据下几乎无耗时,万级以上数据性能优势更明显 for (let i = 0, len = myArray.length; i < len; i++) { const current = myArray[i]; // 新增DisplayName属性 current.DisplayName = current.Name; // 删除原Name属性 delete current.Name; // 如果需要同时把Age改为小写age,加上下面两行 // current.age = current.Age; // delete current.Age; }
不可修改原对象场景的优化写法
如果业务要求不能修改原数组和原对象,需要返回新的 immutable 数据,可以用解构赋值简化写法,不用手动枚举所有键,可维护性更强,性能和你原写法基本持平:
const newArray = myArray.map(({ Name, Age, ...otherProps }) => ({ DisplayName: Name, age: Age, ...otherProps }));
补充说明
如果你的数组长度只有10条,几种写法的性能差异完全感知不到,只有当数据量达到万级及以上时,原地修改的for循环才会体现出明显的性能优势。
内容的提问来源于stack exchange,提问作者uppal2665
相关产品推荐
相关产品推荐

