js 实现数组对象递归更改属性名称

//递归遍历改名
export const renameObjectProperties  = (obj, oldName, newName) => {
  // 如果是数组,则使用forEach进行遍历,为了保持索引不变
  if (Array.isArray(obj)) {
    obj.forEach((item, index) => {
      // 如果item是对象或数组,则递归调用自身
      if (typeof item === 'object' && item !== null) {
        renameObjectProperties(item, oldName, newName);
      } else if (item === oldName) {
        // 如果item与旧属性名相同,则替换为新的属性名
        obj[index] = newName;
      }
    });
  } else if (typeof obj === 'object' && obj !== null) {
    // 如果是对象,则使用for...in遍历
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        if (key === oldName) {
          // 如果当前属性名与旧属性名相同,则替换为新的属性名
          obj[newName] = obj[oldName];
          delete obj[oldName];
        } else if (typeof obj[key] === 'object' && obj[key] !== null) {
          // 如果当前属性是对象,则递归调用自身
          renameObjectProperties(obj[key], oldName, newName);
        }
      }
    }
  }
  // 返回修改后的对象或数组
  return obj;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果你想要归地修改 Vue 数组中的对象属性名,可以使用归函数来实现。下面是一个示例代码: ```javascript function recursiveRename(obj, oldName, newName) { // 检查对象是否为数组 if (Array.isArray(obj)) { // 遍历数组中的每个元素,并归调用该函数 obj.forEach((item) => { recursiveRename(item, oldName, newName); }); } else if (typeof obj === 'object' && obj !== null) { // 检查对象是否为对象类型(非数组、非null) // 遍历对象的每个属性,并归调用该函数 Object.keys(obj).forEach((key) => { const value = obj[key]; if (key === oldName) { // 如果属性名匹配到了需要修改的旧属性名,则修改为新属性名 delete obj[key]; // 删除旧属性名的键值对 obj[newName] = value; // 添加新属性名的键值对 } else { // 如果属性值是对象数组,则归调用该函数 recursiveRename(value, oldName, newName); } }); } } // 示例用法 const data = [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30, address: { street: '123 Main St', city: 'New York' } } ]; recursiveRename(data, 'name', 'fullName'); console.log(data); // 输出: // [ // { fullName: 'Alice', age: 25 }, // { fullName: 'Bob', age: 30, address: { street: '123 Main St', city: 'New York' } } // ] ``` 在上述示例中,`recursiveRename` 函数用于归地修改对象属性名。它接受三个参数:要修改的对象 `obj`、旧属性名 `oldName` 和新属性名 `newName`。函数首先检查对象类型,如果是数组,则遍历数组中的每个元素,并归调用 `recursiveRename`。如果是对象(非数组、非null),则遍历对象的每个属性,并归调用 `recursiveRename`。如果属性名匹配到了需要修改的旧属性名,则删除旧属性名的键值对,并添加新属性名的键值对。如果属性值是对象数组,则继续归调用 `recursiveRename`。最后,示例代码使用 `recursiveRename` 函数将数组 `data` 中的属性名 'name' 修改为 'fullName'。 希望以上代码能够帮助到你!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锋小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值