H5W3
当前位置:H5W3 > 其他技术问题 > 正文

JavaScript 【数组】转【对象】进行某些操作后转回【数组】后,得到的数组顺序和最开始的发生变化怎么解决

比如初始数组:

const arr1 = [
{id: 1, name: 'jack'},
{id: 3, name: 'rose'},
{id: 2, name: 'tom'}
]

数组对象相互转化方法:

export function arrToMap(arr: any[], key: string) {
return arr.reduce((map, item) => {
map[item[key]] = item
return map
}, {})
}
export function mapToArr(map: object) {
return Object.values(map)
}

使用:

const arrMap = arrToMap(arr1, 'id')
// 得到arrMap:
{
"1": {
"id": 1,
"name": "jack"
},
"2": {
"id": 2,
"name": "tom"
},
"3": {
"id": 3,
"name": "rose"
}
}
/*
在得到对象后由于对象的查询是O(1)所以更快,对其进行操作后转化为数组
*/
const arr2 = mapToArr(arrMap)
// 得到arr2,顺序已经变化
[
{
"id": 1,
"name": "jack"
},
{
"id": 2,
"name": "tom"
},
{
"id": 3,
"name": "rose"
}
]

回答

可以用MapMap的顺序是根据插入顺序

image.png

对象的查找时间复杂度小

代价就是失去了数组原有的顺序信息
当然你也可以把这部分信息加到对象里,每个对象都有唯一的 index 用作顺序标记

未经允许不得转载:H5W3 » JavaScript 【数组】转【对象】进行某些操作后转回【数组】后,得到的数组顺序和最开始的发生变化怎么解决

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址