数组转对象
在开发中,会出现一个现象,对象的排序和数组的排序是不一样的。
对象是没有索引的,所有是乱序的
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));
从截图来看,是乱序的对象
目前我尝试了很多方案,没有一种方案,可以解决对象的更换