我正在尝试对其中带有字符串数组的数组进行排序。这类似于这个问题(Sort an array with arrays in it by string),但是我不确定如何实现。我的数组如下
var myArray = [
['blala', 'alfred', '...'],
['jfkdj', 'berta', '...'],
['vkvkv', 'zimmermann', '...'],
['cdefe', 'albert', '...'],
];
我试图通过名称或内部数组的第二个参数按字母顺序(不区分大小写)对其进行排序。之后,如果有两个元素具有相同的第二个参数,我想按第一个参数排序。我尝试使用以下内容,但未成功,并没有真正了解原因。任何人都可以建议:
function Comparator(a,b){
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
return 0;
}
var myArray = [
['blala', 'alfred', '...'],
['jfkdj', 'berta', '...'],
['vkvkv', 'zimmermann', '...'],
['cdefe', 'albert', '...'],
];
myArray = myArray.sort(Comparator);
要在第二个参数之后对第一个参数进行排序,我会这样做吗?
function Comparator(a,b){
if (a[1] < b[1]){
if (a[2] < b[2]) return -1
if (a[2] > b[2]) return 1;
}
return -1;
}
if (a[1] > b[1]) return 1;{
if (a[2] < b[2]) return -1
if (a[2] > b[2]) return 1;
}
return 1;
}
return 0;
}
var myArray = [
['blala', 'alfred', '...'],
['jfkdj', 'berta', '...'],
['vkvkv', 'zimmermann', '...'],
['cdefe', 'albert', '...'],
];
myArray = myArray.sort(Comparator);
最佳答案
您可以编写以下代码:
function Comparator(a, b) {
// you can use the `String.prototype.toLowerCase()` method
// if the comparison should be case insensitive
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
if (a[0] < b[0]) return -1;
if (a[0] > b[0]) return 1;
return 0;
}
上面的函数首先根据数组的第二个元素对元素进行排序。如果第二个元素相等,则根据第一个元素对它们进行排序;如果
a[1] === b[1]
和a[0] === b[0]
,则返回0
,而a
和b
位置保持不变。From MDN
Array.prototype.sort
documentation: