我正在尝试对以下列表列表进行排序:
var entries = [[new Date("Thu Apr 06 2017"), 12], [new Date("Thu Feb 02 2017"), 11]]
entries.sort()
我希望条目会切换顺序,因为第一个日期是在第二个日期之后。但是,这种情况并没有发生。这是为什么?
答案 0 :(得分:4)
您需要为sort()
提供一个参数,以便它知道如何比较内部数组。默认情况下,它只会将它们转换为字符串并进行比较
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
如果未提供compareFunction,则通过将元素转换为字符串并按Unicode代码点顺序比较字符串来对元素进行排序。例如,“香蕉”出现在“樱桃”之前。在数字排序中,9出现在80之前,但由于数字被转换为字符串,因此“80”以Unicode顺序出现在“9”之前。
因此,在您的情况下,将"[new Date("Thu Apr 06 2017"), 12]"
与"[new Date("Thu Feb 02 2017"), 11]"
进行比较{4}中A
在{2}之前的F
工作代码:
var entries = [[new Date("Thu Apr 06 2017"), 12], [new Date("Thu Feb 02 2017"), 13]]
entries.sort(function(a, b) {
// compare the dates
return a[0]-b[0];
});
答案 1 :(得分:0)
sort()方法对数组的项进行排序。
排序顺序可以是字母顺序或数字顺序,也可以是升序(向上)或降序(向下)。
默认情况下,sort()方法按字母顺序和升序将值排序为字符串。
你可以这样排序
var entries = [
{calander: "Thu Apr 06 2017",value:"12"},
{calander: "Thu Feb 02 2017",value:"11"}
];
entries.sort((x)=> new Date(x.calander).getTime());
答案 2 :(得分:0)
由于您的数组包含数组中的数组。[new Date(“Thu Apr 06 2017”),12]在主数组中是包含日期和12个数字输入的子数组。 因此,对整个数组进行排序需要编写自己的自定义排序函数。 它就像你的日期对象包含
一样简单 [new Date("Thu Apr 06 2017"), 12]
[0]->new Date("Thu Apr 06 2017")
[1]->12
因此,根据需要编写排序函数的日期对数组进行排序,如下所示。
entries.sort(
function(x, y)
{
return x[0] > y[0];
}
);
它会根据日期对数组进行排序。
答案 3 :(得分:0)
要在javascript中对数组进行排序,您使用的是Array.prototype.sort()
方法。
当不带参数调用此方法时,arr.sort()
然后
根据每个元素的字符串转换,根据每个字符的Unicode代码点值对数组进行排序。
这对您的情况不起作用,因为您的数组中有数组。
因此,您希望使用arr.sort(compareFunction)
形式,您需要提供一个compareFunction(a, b)
来比较数组的两个元素。比较函数需要返回一个数字。如果小于零,则a
首先出现,如果为零则为零,如果高于零,则b
为先。
因此,为了解决您的问题,我们只需要创建比较数组内部数组的compareFunction。
var entries = [[new Date("Thu Apr 06 2017"), 12], [new Date("Thu Feb 02 2017"), 11]]
function compareMyArrays(a, b){
var aTime = a[0].getTime();
var bTime = b[0].getTime();
return aTime - bTime;
}
entries.sort(compareMyArrays);