marlsun 2023-02-25 21:49 采纳率: 84.2%
浏览 57
已结题

根据原数组属性值增加若干属性


let arr1 = [
  {
    Num: "0001",
    chr_Beijing: "xx",
    chr_Shanghai: "xx"
  },
  {
    Num: "0002",
    chr_Beijing: "xx",
    chr_Shanghai: "xx"
  },
   {
    Num: "0003",
    chr_Beijing: "xx",
    chr_Shanghai: "xx"
  }
]

let arr2 = [
  {
    Num: "0001",
    Type: "T1",
    T1_Beijing: "",
    chr_Beijing: "xx",
    T1_Shanghai: "",
    chr_Shanghai: "xx"  
  },
  {
    Num: "0002",
    Type: "T2",
    T2_Beijing: "",
    chr_Beijing: "xx",
    T2_Shanghai: "",
    chr_Shanghai: "xx"
  },
  {
    Num: "0003",
    Type: "T3",
    T3_Beijing: "",
    chr_Beijing: "xx",
    T3_Shanghai: "",
    chr_Shanghai: "xx"
  }
]

想实现:
我的初始数据如arr1这样的对象数组,有近千条各地的数据,想转换成arr2,自动加入下面的属性:

  1. 根据arr1的Num值,生成arr2的 Type属性,值为Num值去掉0的整数,并在前加“T”字符。
  2. 根据arr1中的属性名 chr_后的地名,与Type的值,合并成新的属性名,值为空。并自动插入相应的数组对象中。

恳请指教!

  • 写回答

6条回答 默认 最新

  • MarkHan_ 2023-02-25 21:56
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    可以按照以下步骤来实现:

    遍历arr1数组,生成对应的Type属性值,并根据Type的值合并生成新的属性名。

    遍历arr2数组,将新生成的属性名加入到数组对象中。

    将arr1中的chr_属性名与Type的值合并生成新的属性名,将其加入到arr2数组对象中,并赋值为空字符串。

    下面是代码实现:

    let arr1 = [
      {
        Num: "0001",
        chr_Beijing: "xx",
        chr_Shanghai: "xx"
      },
      {
        Num: "0002",
        chr_Beijing: "xx",
        chr_Shanghai: "xx"
      },
       {
        Num: "0003",
        chr_Beijing: "xx",
        chr_Shanghai: "xx"
      }
    ]
    
    let arr2 = [
      {
        Num: "0001",
        Type: "T1",
        T1_Beijing: "",
        chr_Beijing: "xx",
        T1_Shanghai: "",
        chr_Shanghai: "xx"  
      },
      {
        Num: "0002",
        Type: "T2",
        T2_Beijing: "",
        chr_Beijing: "xx",
        T2_Shanghai: "",
        chr_Shanghai: "xx"
      },
      {
        Num: "0003",
        Type: "T3",
        T3_Beijing: "",
        chr_Beijing: "xx",
        T3_Shanghai: "",
        chr_Shanghai: "xx"
      }
    ]
    
    for (let i = 0; i < arr1.length; i++) {
      let num = arr1[i].Num.replace(/^0+/, ''); // 去掉前导0的整数
      let type = "T" + num;
      let keys = Object.keys(arr1[i]);
      for (let j = 0; j < keys.length; j++) {
        let key = keys[j];
        if (key.indexOf("chr_") === 0) {
          let city = key.replace("chr_", "");
          let newKey = type + "_" + city;
          arr2[i][newKey] = "";
        }
      }
    }
    
    
    
    

    代码说明:

    1. 通过正则表达式去掉Num属性中的前导0。

    2. 通过Object.keys()方法获取arr1中对象的属性名数组。

    3. 遍历属性名数组,判断是否以chr_开头,如果是则生成新的属性名,并加入到arr2中对应的数组对象中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月25日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路