我有一个如下所示的数组,
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
如何实现这一目标?
答案 0 :(得分:8)
这是一个对象,而不是“数组集合”。虽然对象属性具有顺序(不是按字母顺序排列),但它通常没有用,最好在很大程度上忽略这一事实。你可能在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上,当我运行时,我看到了这一点:
请注意订单b
,c
,a
- 我添加属性的顺序。
但是如果我用小箭头展开那个对象:
在展开式视图中,它会将其显示为a
,b
,c
- 为方便起见,这是字母。
另请注意,JSON是按对象顺序排列的(这是规范所要求的,因此虽然JSON根本没有顺序,但通过使用JSON.stringify
序列化JavaScript对象创建的JSON将在兼容的JavaScript上生成引擎,按对象顺序列出属性。)
对象属性的顺序不是它通常有用的东西;他们太难控制了。如果需要订购,请使用数组。但是因为看起来你不想要订单,那很好,只是不要担心结果对象的属性看起来的顺序。