如何仅运行一次reduce方法修改对象两个键名并保留其原有位置
单次reduce修改多个对象键名方案
你可以在单次reduce的键名映射逻辑中同时处理两个键的替换规则,无需两次遍历,同时能完全保留原有对象的键排序。
优化后代码如下:
const newArrayOfObj = rows.map(row => { return Object.keys(row).reduce((acc, key) => { // 按规则替换键名,无匹配则保留原键名 const newKey = key === 'redirects' ? 'clicks' : key === 'tags' ? 'external impressions' : key; return { ...acc, [newKey]: row[key] }; }, {}); }); return newArrayOfObj;
如果后续需要替换的键名更多,可以单独抽离映射表,扩展性更好:
// 提前定义键名映射规则,新增替换规则只需修改这个对象即可 const keyReplaceMap = { redirects: 'clicks', tags: 'external impressions' }; const newArrayOfObj = rows.map(row => { return Object.keys(row).reduce((acc, key) => { return { ...acc, [keyReplaceMap[key] || key]: row[key] }; }, {}); }); return newArrayOfObj;
注意:该方案依赖ES6+规范的对象键遍历顺序保证,主流现代浏览器、所有Node.js LTS版本均支持该特性,新对象的键顺序和原对象完全一致,不会出现排序错乱问题。
内容的提问来源于stack exchange,提问作者elad
相关产品推荐
相关产品推荐

