Javascript 循环遍历数组并将每个元素设置为对象的属性会扰乱顺序
我有一个包含一些ID的数组:Javascript 循环遍历数组并将每个元素设置为对象的属性会扰乱顺序,javascript,arrays,loops,object,properties,Javascript,Arrays,Loops,Object,Properties,我有一个包含一些ID的数组: let ids = [ '184', '085', '241', '086', '087', '165' ]; 和一个空对象-let data={} 我在数组中循环并将每个元素设置为对象的属性: ids.forEach(id => { data[id] = ''; }); 我希望数据对象是: { '184': '', '085': '', '241': '', '086': '', '087': '', '165': '' } 但是当我conso
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] = '';
}
但同样混乱的订单结果。我需要知道如何按正确的顺序设置属性,更重要的是,是什么导致了此问题。您需要使用映射来保持插入顺序。对象键按插入顺序排列,数字键按升序排列除外
let id=['184'、'085'、'241'、'086'、'087'、'165'];
常量映射=新映射;
forEach(id=>map.set(id');
map.forEach((val,key)=>console.log(key,'=',val))代码>对象不是有序的数据结构-您可以通过道具名称而不是索引来访问它们的内容。如果顺序很重要,就保留数组。正如Jornsharpe所说,这是不可能的,因为对象键本身从来没有顺序过。我可以问你为什么要有序的吗?你需要按特定的顺序处理它们吗?@DavidLosert实际上,对象键有一个定义的顺序。请看@jorndharpe,我以为我在哪里读到过,现在对象属性确实有一个顺序。该顺序是基于插入的,即最早插入的属性出现在最近的插入之前…感谢ton@hev1的回答。工作起来很有魅力!另外,我不知道地图,所以也谢谢你!不新建地图代码>需要是新映射()代码>?