按字符串对数组中的数组进行排序

dmn*_*hhn 57 javascript arrays sorting

我有一个包含几个数组的数组,我想根据这些数组中的某个字符串来排序数组.

var myArray = [
                [1, 'alfred', '...'],
                [23, 'berta', '...'],
                [2, 'zimmermann', '...'],
                [4, 'albert', '...'],
              ];
Run Code Online (Sandbox Code Playgroud)

我怎么能按名称对它进行排序,以便albert排在第一位,zimmermann排在最后?

我知道如果我可以使用整数进行排序我会怎么做但字符串让我无能为力.

谢谢您帮忙!:)

Mar*_*lan 95

这可以通过将支持函数作为参数传递给Array.sort方法调用来实现.

像这样的东西:

 function Comparator(a, b) {
   if (a[1] < b[1]) return -1;
   if (a[1] > b[1]) return 1;
   return 0;
 }

 var myArray = [
   [1, 'alfred', '...'],
   [23, 'berta', '...'],
   [2, 'zimmermann', '...'],
   [4, 'albert', '...'],
 ];

 myArray = myArray.sort(Comparator);
 console.log(myArray);
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,请使用Comparator方法中的字符串的toUpperCase方法(a [1] .toUpperCase()和b [1] .toUpperCase).这将使排序不敏感 (3认同)

vha*_*lac 40

您仍然可以使用array.sort()自定义功能.在函数内部,只需比较要用作键的元素.例如,您可以使用:

myArray.sort(function(a, b) { 
    return a[1] > b[1] ? 1 : -1;
});
Run Code Online (Sandbox Code Playgroud)

  • 所以,如果你需要保留元素,如果相等:`return a [1] == b [1]?0:(a [1]> b [1]?1:-1);` (2认同)

lus*_*chn 12

现在有一个更简单的方法:

myArray = myArray.sort(function(a, b) {
    return a[1].localeCompare(b[1]);
})
Run Code Online (Sandbox Code Playgroud)

它也不区分大小写.

资料来源:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare


gor*_*don 7

真棒!第一个元素,第二个元素和第三个元素的复合排序,在这个例子中都是升序的

myArray=myArray.sort(function(a,b){
    retVal=0;
    if(a[0]!=b[0]) retVal=a[0]>b[0]?1:-1;
    else if(a[1]!=b[1]) retVal=a[1]>b[1]?1:-1;
    else if(a[2]!=b[2]) retVal=a[2]>b[2]?1:-1;
    return retVal
});
Run Code Online (Sandbox Code Playgroud)

(多个列上的多个排序)


Bri*_*unt 5

在ES6中,人们可能会做一个相对简洁的事情:

myArray.sort(([a], [b]) => a.localeCompare(b))
Run Code Online (Sandbox Code Playgroud)

要么

myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
Run Code Online (Sandbox Code Playgroud)

有用/现代位是=>lambda运算符,[X]参数解构.