*初级小白*~ 2023-03-21 17:06 采纳率: 97.9%
浏览 38
已结题

JavaScript数组变化

如何把obj3替换掉arr数组里面的info消息,得出res

img

const arr = [{
      content: {
        info: {
          stu1: {
            name: '张三',
            age: 12,
            school:'南校'
          },
          stu2:{
            name:'李四',
            age:12,
            school:'北校'
          }
        }
      }
    }, {
      content: {
        info: {
          stu1: {
            name: '张三',
            age: 12,
            school:'南校'
          },
          stu2:{
            name:'李四',
            age:12,
            school:'北校'
          }
        }
      }
    }]
    const obj3={
      info: {
          stu1: {
            name: '张三',
            age: 12
          },
          stu2:{
            name:'李四',
            age:12
          },
          stu3:{
            name:'王五',
            age:23
          }
        }
    }

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2023-03-21 17:09
    关注

    根据name值决定是否删除、添加arr中对应项?还是根据stu1,stu2,stu3这种键名称?

    下面这个是根据stu1,stu2,stu3这种键名称

    ///arr和obj3数据
        let keys = Object.keys(obj3.info);
        arr.forEach(item => {
            //新增
            keys.forEach(key => {
                if (!item.content.info[key]) {
                    item.content.info[key] = obj3.info[key];
                }
            });
            //删除
            Object.keys(item.content.info).forEach(key => {
                if (!obj3.info[key]) delete item.content.info[key]
            })
        });
        console.log(JSON.stringify(arr, null, 2))
    

    下面根据name

        ///得到同一个info下的不重名键名称
        function getKey(info) {
            let i = 1;
            while (true) {
                if (!info['stu' + i]) return 'stu' + i
                i++;
            }
        }
    
        let key_names = Object.keys(obj3.info).map(i => ({ key: i, name: obj3.info[i].name }));//得到obj3中的name值和键值对象集合
        arr.forEach(item => {
            let keys = Object.keys(item.content.info), arrNames = keys.map(i => item.content.info[i].name)
    
            //删除
            keys.forEach(key => {
                if (!key_names.some(i => item.content.info[key].name == i.name)) delete item.content.info[key]
            });
    
            //添加
            key_names.forEach(i => {
                if (!arrNames.some(x => i.name == x)) item.content.info[getKey(item.content.info)] = obj3.info[i.key];
            })
        });
        console.log(JSON.stringify(arr, null, 2))
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 修改了问题 3月21日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line