如何修改已过滤对象数组的键名:将billingAcc、System替换为bill、invoice
问题:过滤对象数组并修改指定键名
我已成功完成对象数组的数据过滤操作,但希望修改过滤后对象的键名,具体是将原键名“billingAcc”改为“bill”,“System”改为“invoice”。以下是我目前的实现代码:
let items = this.mydata; let aSelectedData = []; const aAcceptedKeys = ["billingAcc", "System"]; aSelectedData = items.map(function (v, k) { let nestedObjects = []; for (let i = 0; i < aAcceptedKeys.length; i++) { let k = i; let v1 = aAcceptedKeys[k]; if (typeof v[v1] != 'undefined') { nestedObjects[v1] = v[v1]; } } return Object.assign({}, nestedObjects); });
解决方案
可以用键名映射对象替代原来的字符串数组,既能指定要保留的键,又能直接关联原键和新键,逻辑更清晰:
基础易读写法
let items = this.mydata; // 定义原键名到新键名的映射关系 const keyMap = { "billingAcc": "bill", "System": "invoice" }; const aSelectedData = items.map(item => { const newObj = {}; // 遍历映射里的原键名 for (const oldKey in keyMap) { // 检查原对象是否包含该键 if (item.hasOwnProperty(oldKey)) { // 用新键名赋值 newObj[keyMap[oldKey]] = item[oldKey]; } } return newObj; });
ES6+简洁写法
如果习惯函数式风格,可用Object.fromEntries简化代码:
let items = this.mydata; const keyMap = { "billingAcc": "bill", "System": "invoice" }; const aSelectedData = items.map(item => Object.fromEntries( // 将映射转为键值对数组,替换键名后过滤无效项 Object.entries(keyMap).map(([oldKey, newKey]) => item.hasOwnProperty(oldKey) ? [newKey, item[oldKey]] : null ).filter(Boolean) ) );
改动说明
- 用
keyMap对象替代原数组,直接绑定原键与新键,避免单独维护两个列表 - 用
hasOwnProperty替代typeof判断,更严谨地检查对象自有属性,排除继承属性干扰 - 箭头函数简化回调写法,代码更紧凑直观
内容的提问来源于stack exchange,提问作者Runa
相关产品推荐
相关产品推荐

