如何按最后一个元素的顺序对列表列表进行排序?
到目前为止,这是我最好的尝试:
var mylist = [ [1, 'c'], [3, 'a'], [5, 'b']];
mylist.sort(function(a,b){return a[1]-b[1];});
我对sort
的来电无效,mylist
仍保持相同的顺序。
答案 0 :(得分:9)
var mylist = [ [1, 'c'], [3, 'a'], [5, 'b']];
mylist.sort(function(a,b){return a[1]>b[1];});
使用>
按升序对列表进行排序,或<
以其他方式对列表进行排序。这样你就可以比较两个字符串。您试图从另一个字符串中减去一个返回NaN
的字符串。
答案 1 :(得分:3)
var mylist = [ [1, 'c'], [3, 'a'], [5, 'b']];
// to sort by 1st NUMBER element; minus also used for object such as date
mylist.sort(function(a,b){return a[0] - b[0];});
// to sort by 2nd STRING element with >.
// strings can be compared based on alphabetical order with > or <,
// but not with a math order operator -, which is supposed to used for comparison between number or date.
mylist.sort(function(a,b){return a[1] > b[1];});
上面提到的例子按升序排序,在这里我注意到我理解谁可能需要: 按升序排序[1,9,7]到[9,7,1],我们可以想象有一个空数组[],然后我们将每个元素逐个放入该数组中正确的顺序(基于与现有元素的比较)。
function(a,b) { return b - a; }
这里有一个是现有的,b是我们要放在数组中的那个。
对于[1,9,7],循环将是:
[]
// to put 1
[1]
// to put 9
a = 1, b = 9, b - a > 0 ==> [9,1]
// to put 7
a = 9, b = 7, b - a < 0 ==> [9,7,1]
a = 1, b = 7, b - a > 0 ==> [9,7,1]