我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。
var myArray = [
[1, 'alfred', '...'],
[23, 'berta', '...'],
[2, 'zimmermann', '...'],
[4, 'albert', '...'],
];
如何按名称对其进行排序,以便 albert 排在第一位, zimmermann 排在最后?
我知道如果我可以使用整数进行排序我会怎么做但字符串让我一无所知。
感谢您的帮助! :)
答案 0 :(得分:88)
这可以通过将支持函数作为参数传递给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);
答案 1 :(得分:40)
您仍然可以将array.sort()
与自定义功能配合使用。在函数内部,只需比较要用作键的元素。例如,您可以使用:
myArray.sort(function(a, b) {
return a[1] > b[1] ? 1 : -1;
});
答案 2 :(得分:11)
现在有一个更简单的方法:
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
答案 3 :(得分: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
});
(多列上多重排序)
答案 4 :(得分:5)
在ES6中,人们可能会做一个相对简洁的事情:
myArray.sort(([a], [b]) => a.localeCompare(b))
或
myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
有用/现代位是=>
lambda运算符,[X]
参数解构。