当我 console.log details
变量时,我得到以下结果:
详细信息:{
1:{
2015-2-10 : 0
2015-2-11 : 0
2015-2-12 : 0
2015-2-13 : 0
2015-2-14 : 0
2015-2-15 : 0
2015-2-16 : 0
2015-2-17 : 0
2015-2-18 : 0
2015-2-19 : 0
2015年2月2日 : 0
2015-2-20 : 0
2015-2-21 : 0
2015-2-22 : 0
2015-2-23 : 0
2015-2-24 : 0
2015-2-25 : 0
2015-2-26 : 0
2015-2-27 : 1
2015年2月28日 : 1
2015年2月3日 : 0
2015-2-4 : 0
2015-2-5 : 0
2015-2-6 : 0
2015年2月7日 : 0
2015年2月8日 : 0
2015年2月9日 : 0
2015年3月1日 : 0
}
}
我想做的是按升序显示日期。所以输出将变成:
详细信息:{
1:{
2015年2月2日 : 0
2015年2月3日 : 0
2015-2-4 : 0
2015-2-5 : 0
2015-2-6 : 0
2015年2月7日 : 0
2015年2月8日 : 0
2015年2月9日 : 0
2015-2-10 : 0
2015-2-11 : 0
2015-2-12 : 0
2015-2-13 : 0
2015-2-14 : 0
2015-2-15 : 0
2015-2-16 : 0
2015-2-17 : 0
2015-2-18 : 0
2015-2-19 : 0
2015-2-20 : 0
2015-2-21 : 0
2015-2-22 : 0
2015-2-23 : 0
2015-2-24 : 0
2015-2-25 : 0
2015-2-26 : 0
2015-2-27 : 1
2015年2月28日 : 1
2015年3月1日 : 0
}
}
我的问题:可以吗?
我的骗子是 http://plnkr.co/edit/dQO3D1Omc0o7ZH9TfeUZ?p=preview 提前致谢!
最佳答案
My question: Is it possible to do it?
从 ES2015 开始,是的,这是可能的,但这几乎总是一个坏主意。当您想要特定的顺序时,请使用数组或(在某些有限情况下)Map
(Map
对象严格按照首次添加键的条目的时间排序) .
您的具体示例可能的原因是这些属性都是“自己的”属性(不是继承的),并且它们的名称不是 integer indexes 。对于该属性子集,顺序是属性添加到对象的顺序。因此,要执行您所描述的操作,您需要创建一个新对象,并按照您希望属性出现的顺序向其中添加属性。
但再次强调:不要这样做。 :-) 使用 name
/value
对象数组,或 Map
。
从 ES5 开始(第一次提出这个问题时):不。您引用的结构是一个属性名称类似于 "2015-02-28"
的对象>。 JavaScript 中的对象其属性根本没有顺序。为了有顺序,你必须(目前)有一个数组。 ES6 将引入 Map
对象,这些对象是按其键的插入顺序排序的映射。但 ES5 没有这些。
这并不意味着您不能按您想要的任何顺序访问这些属性。您可以通过 Object.keys
获取属性名称数组,并且可以根据需要对数组进行排序。
关于javascript - 按升序对对象中的日期属性进行排序 Angularjs/Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29094857/