用string对数组进行sorting

我有一个数组,包含几个数组,我想要sorting的数组中的某个string。

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

我怎样才能按名字sorting呢,这样albert 先走了zimmermann走到最后了?

我知道如果我可以使用整数进行sorting,但是string让我无能为力,我该怎么做。

感谢您的帮助! 🙂

这可以通过将支持函数作为parameter passing给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); 

你仍然可以使用array.sort()和一个自定义函数。 在函数内部,只需比较要用作键的元素即可。 举个例子,你可以使用:

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

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

 myArray = myArray.sort(function(a, b) { return a[1].localeCompare(b[1]); }) 

它也是不区分大小写的。

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

真棒! 复合sorting在第一个元素,第二个元素,然后第三个,在这个例子中都是升序

 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 }); 

(在多个列上多重sorting)

在ES6中,人们可能会做的比较精辟:

 myArray.sort(([a], [b]) => a.localeCompare(b)) 

要么

 myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0) 

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