javascript按子列表第二个条目排序列表

时间:2016-01-04 20:30:09

标签: javascript sorting

如何按最后一个元素的顺序对列表列表进行排序?

到目前为止,这是我最好的尝试:

var mylist = [ [1, 'c'], [3, 'a'],  [5, 'b']];
mylist.sort(function(a,b){return a[1]-b[1];});

我对sort的来电无效,mylist仍保持相同的顺序。

2 个答案:

答案 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是我们要放在数组中的那个。

  • 如果返回&gt; 0(真)&gt;&gt; [b,a],我们可以将返回值视为a的顺序,positive / true意味着a应该稍后放置,这是sort()的意思。
  • 如果返回&lt; = 0(false)&gt;&gt; [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] 
相关问题