如何在没有javascript排序的情况下生成数组集合?

Mur*_*Gan 0 javascript arrays

我有一个像下面的数组,

var array=[];
array[0]={id:BBB,Name:"BBB"}
array[1]={id:AAA,Name:"AAA"}
Run Code Online (Sandbox Code Playgroud)

我想将此数组转换为如下所示的数组集合

var collection={}
array.forEach(function(arr){
  collection[arr.id]=true;
});
Output : collection={AAA:true,BBB:true} // this is output is sorted in alphabetic order, actually what i want is like below,

Output : collection={BBB:true,AAA:true} // this is the expected result
Run Code Online (Sandbox Code Playgroud)

怎么做到这一点?

T.J*_*der 8

TL; DR

这是一个对象,而不是"数组集合".虽然对象属性具有顺序(不是按字母顺序排列),但它通常没有用,最好在很大程度上忽略这一事实.你可能在devtools中看这个并扩展对象的显示; 在该视图中,devtools可能会按字母顺序显示属性,以便您轻松找到所需内容.

更多细节超过必要

您正在向对象添加条目(而不是"数组集合").对象中属性的顺序很复杂(它们的确具有ES2015的顺序),但基本上对于对象的"自有"属性,顺序是您添加它们的顺序(除了看起来像整数索引的东西的处理方式不同) .

但是,如果您在devtools中查看对象的扩展表示,它可能会按字母顺序显示对象的属性.这对您来说只是一个方便的功能,并不意味着对象的属性是按顺序排列的.

例如:

var o = {};
o.b = 42;
o.c = 42;
o.a = 42;
console.log("object", o);
console.log("json", JSON.stringify(o));
Run Code Online (Sandbox Code Playgroud)
Open the browser's devtools, then hit Run.
Run Code Online (Sandbox Code Playgroud)

在Chrome上,当我运行它时,我看到了这个:

在此输入图像描述

注意顺序,b,c,a -我加的属性的顺序.

但是,如果我用小箭头扩展该对象:

在此输入图像描述

在展开的视图,它显示了他们作为a,b,c -字母为了方便.

另请注意,JSON是按对象顺序排列的(这是规范所要求的,因此当JSON根本没有顺序时,通过JSON.stringify在兼容的JavaScript引擎上使用will 序列化JavaScript对象创建的JSON按对象顺序列出属性).

对象属性的顺序不是它通常有用的东西; 他们太难控制了.如果需要订购,请使用数组.但是因为看起来你不想要订单,那很好,只是不要担心结果对象的属性看起来的顺序.

  • 我想混淆认为属性按字母顺序排序是因为当您在开发控制台中展开对象时,它会为您排序属性. (3认同)
  • @George:***非常***好点,我会在答案中标出来. (2认同)