【发布时间】:2020-12-02 07:24:00
【问题描述】:
我有一个包含一些 ID 的数组:
let ids = [ '184', '085', '241', '086', '087', '165' ];
还有一个空对象 - let data = {};
我正在遍历数组并将每个元素设置为对象的属性:
ids.forEach(id => {
data[id] = '';
});
我希望数据对象是:
{ '184': '', '085': '', '241': '', '086': '', '087': '', '165': '' }
但是当我console.log(data)我发现属性的顺序搞砸了data是:
{ '165': '', '184': '', '241': '', '085': '', '086': '', '087': '' }
我也试过用这种方法循环数组:
for (let id of ids) {
data[id] = '';
}
但同样的混乱订单结果。我需要知道如何以正确的顺序设置属性,更重要的是,是什么导致了这个问题。
【问题讨论】:
-
对象不是有序的数据结构——你可以通过 prop 名称而不是索引来访问它们的内容。如果顺序很重要,请保留数组。
-
正如 jonrsharpe 所说 - 这是不可能的,因为对象键本身从未被排序。我可以问你为什么要按顺序排列它们吗?你需要按一定的顺序对它们做任何事情吗?
-
@DavidLosert 实际上,对象键确实有定义的顺序。见stackoverflow.com/questions/5525795/…
-
@jonrdharpe 我以为我在某处读过,现在对象属性确实有顺序。该顺序是基于插入的,即最旧的插入属性出现在最近的插入之前...
标签: javascript arrays loops object properties