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"
}
]
回答
可以用Map
,Map
的顺序是根据插入顺序
对象的查找时间复杂度小
代价就是失去了数组原有的顺序信息
当然你也可以把这部分信息加到对象里,每个对象都有唯一的 index 用作顺序标记
以上是 JavaScript 【数组】转【对象】进行某些操作后转回【数组】后,得到的数组顺序和最开始的发生变化怎么解决 的全部内容, 来源链接: utcz.com/a/42236.html