如何解决用内部对象值交换数组键
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"
}]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。