Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环遍历数组并将每个元素设置为对象的属性会扰乱顺序_Javascript_Arrays_Loops_Object_Properties - Fatal编程技术网

Javascript 循环遍历数组并将每个元素设置为对象的属性会扰乱顺序

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

我有一个包含一些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] = '';
}

但同样混乱的订单结果。我需要知道如何按正确的顺序设置属性,更重要的是,是什么导致了此问题。

您需要使用
映射来保持插入顺序。对象键按插入顺序排列,数字键按升序排列除外

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的回答。工作起来很有魅力!另外,我不知道地图,所以也谢谢你!不
新建地图需要是
新映射()