后台返回的重复数据

后台返回的数据有16项,其中重复的有8项,重复中的数据例如menuName,menuCode是相同的,permissionName这是不同的,怎样才可以将16项数据合并为8项,就是有相同的两排数据重复的合并为一个,不同的添加到一项里面,举个例子:创建一个数组:将0跟1合并,他们俩的数据MenuName 与menuCode只存一个,其余的添加进去,形成一个数据

图片描述

图片描述

图片描述

阅读 2.3k
1 个回答

目前没管id,只是合并了数据。

  <script>
    let arr = [
      {
        menuName: '品牌活动',
        menuCode: 'activity',
        permissionName: 'activity:write'
      },
      {
        menuName: '品牌活动',
        menuCode: 'activity',
        permissionName: 'activity:red'
      },
      {
        menuName: '权限管理',
        menuCode: 'authority',
        permissionName: 'activity:write'
      },
      {
        menuName: '权限管理',
        menuCode: 'authority',
        permissionName: 'activity:red'
      }
    ];
    var mergeArr = () => {
      let hash = {};
      let arrItems = [];
      for (let i = 0; i < arr.length; i++) {
        let item = arr[i];
        let itemName = `${item.menuName}_${item.menuCode}`; //设置标识,区分是否已经加在了hash中
        if (!hash[itemName]) { // 没有加过
          arrItems.push(item); // 直接push到数组中
          hash[itemName] = item;
        } else { // 已经在hash中存在的,也就意味着当前item跟有重复
          for (var j = 0; j < arrItems.length; j++) { // 遍历无重复数组
            let comm = arrItems[j];
            if (
              comm.menuName == item.menuName &&
              comm.menuCode == item.menuCode
            ) {
              comm.permissionName += `,${item.permissionName}`;
              break;
              // 合并数据
            }
          }
        }
      }
      return arrItems;
    };
    console.log(mergeArr());
  </script>

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题