gpt4 book ai didi

Javascript 附加对象不保证顺序

转载 作者:行者123 更新时间:2023-11-30 09:10:23 26 4
gpt4 key购买 nike

我在堆栈溢出中看过这个关于对象保证顺序的问题。 Does JavaScript Guarantee Object Property Order?

有的说能保证,有的说不能,视情况而定。同时我遇到了以下问题。

我有一个对象数组,类似于下面:

const arrayObject = [
{id:'a123', bar:'hello'},
{id:'a321', bar: 'foo'} ];

现在我想把这个arrayObject变成object of object,结构如下,顺序和数组一样:

const object = {
'a123': {id:'a123', bar:'hello'},
'a321': {id:'a321', bar: 'foo'},
}

基本上是用数组中每一项的id作为对象的key。下面是我用来尝试实现它的代码:

let newObj = {};
arrayObject.forEach(data=>{
const temp = {
[data.id]:{
id: data.id,
bar: data.bar
},
};
newObj={...newObj, ...temp};
})

我确实得到了正确的结构,但是顺序与 arrayObject 的顺序不同,即它返回:

const object = {
'a321': {id:'a321', bar: 'foo'},
'a123': {id:'a123', bar:'hello'},
}

我尝试在数组中添加更多项,但得到了相同的结果。它不保证顺序。

是我的代码有问题,还是根本无法保证顺序?

我必须做什么才能使对象与数组的顺序相同?

最佳答案

通过在(未排序的)对象中包含排序信息来保持顺序。以后任何时候,当您需要恢复原始订单时,使用保存的订购信息...

const arrayObject = [{
id: 'a123',
bar: 'hello'
},
{
id: 'a321',
bar: 'foo'
}
];

let object = {}
arrayObject.forEach((e, i) => {
object[e.id] = { ...e, orderWith: i } // the index will tell us how to sort later
})

// later on
let sorted = Object.values(object).sort((a, b) => a.orderWith - b.orderWith)
console.log(sorted)

关于Javascript 附加对象不保证顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com