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

如何批量修改JavaScript对象数组中的多个属性名?

问题描述

现有如下对象结构:

let myObj = {
  "Accounts": [
    {
      "Type": "Card",
      "CreditCard": {}
    },
    {
      "Type": "ACH",
      "CreditCard": {}
    },
    {
      "Type": "CDA",
      "Checking": {}
    },
    {
      "Type": "INTL",
      "Mortgage": {}
    }
  ]
}

需要将CreditCard、Checking、Mortgage等约20个不同属性名统一修改为FinanceRecord。目前只能逐个指定属性名修改,示例如下:

let temp = myObj.map(({ CreditCard: FinanceRecord, ...item }) => ({
              FinanceRecord,
              ...item,
            }));
// 逐个指定属性名...
myObj.map(({ Checking: FinanceRecord, ...item }) => ({
                  FinanceRecord,
                  ...item,
                }));

期望输出:

let myObj = {
      "Accounts": [
        {
          "Type": "Card",
          "FinanceRecord": {}
        },
        {
          "Type": "ACH",
          "FinanceRecord": {}
        },
        {
          "Type": "CDA",
          "FinanceRecord": {}
        },
        {
          "Type": "INTL",
          "FinanceRecord": {}
        }
      ]
    }

高效实现方案

无需逐个手动指定属性名,以下几种方案可以高效完成批量重命名:

方案1:自动识别非Type属性

如果每个账户对象仅包含Type和目标属性两个字段,直接过滤出非Type的属性即可:

myObj.Accounts = myObj.Accounts.map(account => {
  const targetKey = Object.keys(account).find(key => key !== 'Type');
  return {
    Type: account.Type,
    FinanceRecord: account[targetKey]
  };
});

方案2:精准匹配目标属性列表

如果存在额外属性,或需要明确指定要替换的属性集合,先定义属性列表再批量处理:

// 列出所有需要替换的属性名
const targetProps = ['CreditCard', 'Checking', 'Mortgage', /* 补充剩余17个属性 */];

myObj.Accounts = myObj.Accounts.map(account => {
  const result = { Type: account.Type };
  // 找到当前对象中匹配的目标属性
  const matchedProp = targetProps.find(prop => prop in account);
  if (matchedProp) {
    result.FinanceRecord = account[matchedProp];
  }
  // 保留其他非目标属性(如果需要)
  Object.keys(account).forEach(key => {
    if (key !== 'Type' && key !== matchedProp) {
      result[key] = account[key];
    }
  });
  return result;
});

方案3:解构+动态赋值(简洁版)

利用对象解构和剩余属性,快速提取目标值:

myObj.Accounts = myObj.Accounts.map(({ Type, ...rest }) => {
  const [_, financeData] = Object.entries(rest)[0];
  return { Type, FinanceRecord: financeData };
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:03:15