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

kil*_*les 3 javascript sorting

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

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

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

我的呼吁sort没有效果,并mylist保持相同的顺序.

voi*_*oid 10

var mylist = [ [1, 'c'], [3, 'a'],  [5, 'b']];
mylist.sort(function(a,b){return a[1].localeCompare(b[1]);});
console.log(mylist)
Run Code Online (Sandbox Code Playgroud)

用于a[1].localeCompare(b[1])按升序或b[1].localeCompare(a[1])其他方式对列表进行排序.这样你就可以比较两个字符串.你试图从另一个返回的字符串中减去一个字符串NaN.


Alb*_*ert 5

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];}); 
Run Code Online (Sandbox Code Playgroud)

上面提到的例子给出了按升序排序,这里我记下我对可能需要的人的理解:按升序排序[1,9,7]到[9,7,1],我们可以想象有一个空数组[ ],然后我们将按照正确的顺序将每个元素一一放入该数组中(基于与现有元素的比较)。

function(a,b) { return b - a; }
Run Code Online (Sandbox Code Playgroud)

这里 a 是现有的,b 是我们要放入数组中的。

  • 如果 return > 0 (true) >> [b,a] ,我们可以将返回值视为 a 的顺序,正/true 意味着 a 应该放在后面,这就是 sort() 的意思。
  • 如果返回 <=0 (假) >> [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] 
Run Code Online (Sandbox Code Playgroud)