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

时间:2017-11-15 09:32:30

标签: javascript arrays

我有一个如下所示的数组,

var array=[];
array[0]={id:BBB,Name:"BBB"}
array[1]={id:AAA,Name:"AAA"}

我希望将此数组转换为数组集合,如下所示

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

如何实现这一目标?

1 个答案:

答案 0 :(得分:8)

TL; DR

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

比必要更多细节

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

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

例如:

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

在Chrome上,当我运行时,我看到了这一点:

enter image description here

请注意订单bca - 我添加属性的顺序。

但是如果我用小箭头展开那个对象:

enter image description here

在展开式视图中,它会将其显示为abc - 为方便起见,这是字母。

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

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