微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用内部对象值交换数组键

如何解决用内部对象值交换数组键

我有一个保存对象的数组;

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 举报,一经查实,本站将立刻删除。