我试图在Javascript中对多维数组进行排序。我看到了很多关于如何按数值排序的解释,但我似乎不知道如何根据文本对其排序。
我要排序的数组如下所示:
var blocks = [
{
"heading": ["2013-10-1", "Chris", "11"],
"content": "stuff 1"
},
{
"heading": ["2013-10-3", "Zoe", "14"],
"content": "stuff 2"
},
{
"heading": ["2013-10-2", "Petey", "12"],
"content": "stuff 3"
}
]我知道我可以对这个多维的对象数组进行排序,比如数字的值:
blocks.sort(
function(a,b){
return a.heading[2] - b.heading[2];
}
)如果我想按heading子数组中的第一个或第二个值对数组进行排序,我不确定传递给排序方法的函数会是什么样子,因为索引0的值是日期,而索引1的值是文本。
我试图查找将日期或文本更改为一个数字,然后根据它的数值计算它,但我无法找到这样做的方法(我也不知道这是否是解决这个问题的最佳方法)。有什么建议吗?
发布于 2013-11-28 18:07:25
编辑我应该指出,虽然我建议的最初解决方案有效,但它不是一个好的解决方案,因为它是不必要的复杂。
>运算符可用于您的目的。在比较字符串时,如果字符串a在按字母排序的列表中位于b之前,则字符串a被认为小于字符串a。
唯一的问题是,这是区分大小写的,所以大写放在小写之前,例如,对字符进行排序,AaBbCc会给您ABCabc。
这意味着你可以这样做:
blocks = blocks.sort(function(a,b) { return a.heading[1] > b.heading[1] }先前的答复:
也许有人能够提供一个更优雅的解决方案,但这是可行的。
请注意,sort()按字母顺序排序。因此,我们所需要做的就是使sort()函数在人员名称上工作。
blocks = blocks.sort(
function(a,b){
var x = [a.heading[1], b.heading[1]].sort()
if (x[0] == a.heading[1]) {return -1} else
{return 1};
}
)发布于 2013-11-28 18:06:54
试着做这样的事情:
blocks.sort(function(a, b){
if(a.heading[0] < b.heading[0]) return -1;
if(a.heading[0] > a.heading[0]) return 1;
return 0;
});或者仅仅通过简化上面的代码:
blocks.sort(function(a, b){
if(a.heading[0] < b.heading[0]) {
return -1;
} else {
return 1;
}
return 0;
});您还可以使用以下内容:
blocks.sort(function(a, b){
var heading_a = a.heading.toLowerCase();
var heading_a=b.heading.toLowerCase();
if (heading_a < heading_a) //sort ascending
return -1
if (heading_a > heading_a)
return 1
return 0 //just return default value indicating there is no sort
});如果数据包含unicode字符串,则应该使用上面的代码,如下所示:
blocks.sort(function(a, b){
var heading_a = a.heading[0].toLowerCase();
var heading_a=b.heading[0].toLowerCase();
return heading_a.localeCompare(heading_b);
});这只是一个潜入排序的高峰,它只是一个快速的例子,我希望它能有所帮助。
https://stackoverflow.com/questions/20272169
复制相似问题