js 比较两个数组,并进行替换掉?

作者站长头像
站长
· 阅读数 6

js 比较两个数组,并进行替换掉?

        let arr = [
          {
            sk: [
              { Name: '数据1', Value: '200' },
              { Name: '数据2', Value: '300' },
              { Name: '数据3', Value: '400' },
            ],
          },
          {
            sk: [
              { Name: '数据5', Value: '500' },
              { Name: '数据6', Value: '600' },
              { Name: '数据7', Value: '700' },
            ],
          },
        ];

        let arr2 = {
          name: '数据555',
          val: [200, 300, 500],
        };

需要根据arr2对象里面的val数组里面的值[200, 300, 500]去匹配arr1数组下sk数组里面的Value的值,如果arr1数组下sk数组里面的Value的值和arr2对象里面的val数组里面的值相等就替换Name,把arr2 对象的name 赋值到sk数组里面的Name

期望得到

        let arr = [
          {
            sk: [
              { Name: '数据555', Value: '200' },
              { Name: '数据555', Value: '300' },
              { Name: '数据3', Value: '400' },
            ],
          },
          {
            sk: [
              { Name: '数据555', Value: '200' },
              { Name: '数据555', Value: '500' },
              { Name: '数据7', Value: '700' },
            ],
          },
        ];
        let result = arr.map((item) => {
          if (item.sk.length == 0) return;
          item.sk.forEach((k) => {
            return {
              Name: arr2.val.find((t) => t == k.Value)?.name,
            };
          });
          return item;
        });

这样写了调试了还没效果。麻烦大佬们帮我看看

回复
1个回答
avatar
test
2024-06-23
let result = arr.map((item) => {
    if (item.sk.length === 0) return;
    item.sk.forEach((k) => {
        if (arr2.val.includes(Number(k.Value))) {
            k.Name = arr2.name
        }
    });
    return item;
});

answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容