将数组转成对象,并且排序不变()

数组转对象
在开发中,会出现一个现象,对象的排序和数组的排序是不一样的。
对象是没有索引的,所有是乱序的

  let arr = [
            {
                "id": 33,
                "name": "可选扣分模版"
            },
            {
                "id": 4,
                "name": "重症监护室质量标准"
            },
            {
                "id": 37,
                "name": "重症监护室护理质量评价标准_joyce"
            },
            {
                "id": 36,
                "name": "100分检查模版"
            },
            {
                "id": 8,
                "name": "儿童医院质量优化模板"
            },
            {
                "id": 2,
                "name": "2018年重症监护室护理质量标准要求"
            },
            {
                "id": 7,
                "name": "三甲复审自评标准及考核办法(护理)"
            },
            {
                "id": 30,
                "name": "重构后测试模板1"
            },
            {
                "id": 6,
                "name": "危重患者护理质量标准与考核办法"
            },
            {
                "id": 45,
                "name": "节假日督查标准"
            },
            {
                "id": 47,
                "name": "开发测试"
            },
            {
                "id": 48,
                "name": "药物管理质量评价标准(扣分)"
            },
            {
                "id": 49,
                "name": "药物管理质量评价标准(达标版)"
            },
            {
                "id": 50,
                "name": "病房管理质量评价标准(达标版)"
            },
            {
                "id": 5,
                "name": "基础护理质量标准要求与考核办法"
            },
            {
                "id": 53,
                "name": "病房管理质量评价标准(扣分版)"
            },
            {
                "id": 52,
                "name": "重症监护评价标准"
            },
            {
                "id": 12,
                "name": "湘雅 纯扣分模板"
            },
            {
                "id": 11,
                "name": "测试模板1"
            }
        ]

        function mapObjSort(arr) {
            let map = new Map();
            arr = (arr || []).map((x) => ({ label: x.name, value: x.id }))
            for (let k of arr) {
                map.set(k.value, k);
            }
            const obbj = Array.from(map).reduce((obj, [key, val]) => {
                obj[val.label] = key
                return obj
            }, {})
            console.log(444, obbj);
            return obbj
        }
        console.log(111, mapObjSort(arr));

打印结果如下

在这里插入图片描述

但是会有一个问题,很有意思

如果对象的数据结构变了,将上面打印的对象属性名和属性值对换一下

   let arr = [
            {
                "id": 33,
                "name": "可选扣分模版"
            },
            {
                "id": 4,
                "name": "重症监护室质量标准"
            },
            {
                "id": 37,
                "name": "重症监护室护理质量评价标准_joyce"
            },
            {
                "id": 36,
                "name": "100分检查模版"
            },
            {
                "id": 8,
                "name": "儿童医院质量优化模板"
            },
            {
                "id": 2,
                "name": "2018年重症监护室护理质量标准要求"
            },
            {
                "id": 7,
                "name": "三甲复审自评标准及考核办法(护理)"
            },
            {
                "id": 30,
                "name": "重构后测试模板1"
            },
            {
                "id": 6,
                "name": "危重患者护理质量标准与考核办法"
            },
            {
                "id": 45,
                "name": "节假日督查标准"
            },
            {
                "id": 47,
                "name": "开发测试"
            },
            {
                "id": 48,
                "name": "药物管理质量评价标准(扣分)"
            },
            {
                "id": 49,
                "name": "药物管理质量评价标准(达标版)"
            },
            {
                "id": 50,
                "name": "病房管理质量评价标准(达标版)"
            },
            {
                "id": 5,
                "name": "基础护理质量标准要求与考核办法"
            },
            {
                "id": 53,
                "name": "病房管理质量评价标准(扣分版)"
            },
            {
                "id": 52,
                "name": "重症监护评价标准"
            },
            {
                "id": 12,
                "name": "湘雅 纯扣分模板"
            },
            {
                "id": 11,
                "name": "测试模板1"
            }
        ]
      function mapObjSort(arr) {
            let map = new Map();
            arr = (arr || []).map((x) => ({ label: x.name, value: x.id }))
            for (let k of arr) {
                map.set(k.value, k);
            }
            const obbj = Array.from(map).reduce((obj, [key, val]) => {
                obj[key] = val.label
                return obj
            }, {})
            console.log(444, obbj);
            return obbj
        }

        console.log(111, mapObjSort(arr));

在这里插入图片描述

从截图来看,是乱序的对象

目前我尝试了很多方案,没有一种方案,可以解决对象的更换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值