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)
vha*_*lac 40
您仍然可以使用array.sort()自定义功能.在函数内部,只需比较要用作键的元素.例如,您可以使用:
myArray.sort(function(a, b) {
return a[1] > b[1] ? 1 : -1;
});
Run Code Online (Sandbox Code Playgroud)
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
真棒!第一个元素,第二个元素和第三个元素的复合排序,在这个例子中都是升序的
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)
(多个列上的多个排序)
在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]参数解构.
| 归档时间: |
|
| 查看次数: |
67561 次 |
| 最近记录: |