You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改已过滤对象数组的键名:将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)
  )
);

改动说明

  1. 用keyMap对象替代原数组,直接绑定原键与新键,避免单独维护两个列表
  2. 用hasOwnProperty替代typeof判断,更严谨地检查对象自有属性,排除继承属性干扰
  3. 箭头函数简化回调写法,代码更紧凑直观

内容的提问来源于stack exchange,提问作者Runa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:25:14