问题描述
let arr = [
{
"id": 1,"level": "2",},{
"id": 2,"level": "3",}
]
默认情况下,数组的键从 0 开始,如下所示:
[
0: {id: 1,level:2},1: {id: 2,level:3}
]
如何转换它,使键成为属性“级别”的值? 它应该是这样的:
[
2: {id:1,3: {id:1,level:3}
]
到目前为止,我已经尝试过这个,但它没有删除原始密钥:
arr.map((v,k) => ({[v.level]: v}));
所以我有这样的事情:
[
0: {2:
{id: 1,level:2}
},1: {3:
{id: 2,level:3}
}
]
解决方法
您需要使用 reduce 填充一个新数组:
arr.reduce((prev,curr) => { prev[curr.level] = curr; return prev },[])
,
我想我更喜欢 reduce
方法,但您也可以构造一个“类数组”(即带有数字键和 object
属性的 length
)并将其传递给Array.from
const maxIdx = Math.max(...arr.map(v => parseInt(v.level,10)))
const arrLen = maxIdx + 1;
const arrayLike = {
...Object.fromEntries(arr.map(v => [v.level,v])),length: arrLen
};
const mappedArray = Array.from(arrayLike);
对于
的输出[undefined,undefined,{
"id": 1,"level": "2"
},{
"id": 2,"level": "3"
}]