【发布时间】:2015-09-08 22:33:06
【问题描述】:
我收到一个奇怪的错误,无法弄清楚。我有一组日期对象(AngularJS),我想对它们进行排序。我正在做如下
console.log(tempDates);
tempDates.sort( function(a, b) {
return a-b;
});
console.log(tempDates);
问题是 tempDates 数组正在被修改,即日期值正在被修改。自定义排序功能错了吗? / 我错过了什么?
原来的 tempDates -
["Jun 19", "Jun 26", "Jul 3", "Jul 10", "Jul 17", "Jul 24", "Jul 31", "Aug 7", "Aug 14", "Aug 21", "Aug 28", "Sep 4", "Sep 11"]
排序后是
["Jun 19", "Jun 26", "Jul 1", "Jul 3", "Jul 10", "Jul 17", "Jul 24", "Aug 7", "Aug 14", "Aug 21", "Aug 28", "Sep 4", "Sep 11"]
(请注意,该数组由 DATE 对象组成,我放置的控制台输出只是为了便于阅读)
日期正在发生变化,例如“7 月 1 日”突然出现,“7 月 31 日”已从列表中删除。发生这种情况的任何原因?
【问题讨论】:
-
@V.J.来自 OP 的引用:“请注意,数组由 DATE 对象组成,我放置的控制台输出只是为了便于阅读”
-
@Sirko:
-运算符将对Date实例执行valueOf(hint:number),这将获得与getTime相同的值。减去Date实例很好。 -
@swordfish12:您的代码可以正常工作(证明:jsfiddle.net/cx9on9ph -- 我已经随机化了初始日期,因此我们可以实际看到排序),并且不会 修改数组中的Date对象。您看到的行为来自代码中未包含在问题中的其他内容。 -
我们无法为您提供我们看不到的代码。
-
您可能会遇到well-known console log confusion - 例如,稍后 正在修改日期,然后您扩展您在之前 记录的内容你看到了变化。下面是一个例子:jsfiddle.net/cx9on9ph/1 您可以使用
console.log(JSON.stringify(tempDates))验证这一点,因此记录的内容是不会更改的字符串。
标签: javascript arrays angularjs sorting