我有两个维数阵列,我想按顺序排序并基于字符串长度。我该怎么做?这是我的代码:
["ab", 0]
["ac", 0]
["ad", 0]
["ax", 0]
["ay", 0]
["bd", 0]
["asd", 0]
["bsd", 0]

我希望它按此顺序
<code></code>
我该怎么办?
答案 0 :(得分:1)
这是你想要达到的目标吗?
var arr = [['ab',0],['ax',0],['ac',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]];
var sorted = arr.sort(function(a,b) {
return a > b
}).sort(function(a,b) {
return a[0].length - b[0].length
})
console.log('sorted',sorted)
答案 1 :(得分:1)
您可以使用带有回调的单一排序,该回调使用长度的差异来尊重内部数组的第一项的长度。如果长度相等,则按String#localeCompare
按字母顺序排序。
var array = [['ab', 0], ['ax', 0], ['ac', 0], ['bsd', 0], ['ad', 0], ['asd', 0], ['bd', 0], ['ay', 0]];
array.sort(function (a, b) {
return a[0].length - b[0].length || a[0].localeCompare(b[0]);
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
检查长度是否不同。如果他们这样做,按他们排序。如果相等,则按字母顺序排序:
var arr = [['ab',0],['ax',0],['ac',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]];
function sortByLen(a,b){
if(a[0].length < b[0].length) return -1;
if(a[0].length > b[0].length) return 1;
if(a[0] < b[0]) return -1;
if(a[0] > b[0]) return 1;
return 0;
}
arr.sort(sortByLen);
console.log(arr);
答案 3 :(得分:0)
试试这个
arr = [['ac',0],['ab',0],['ax',0],['bsd',0],['ad',0],['asd',0],['bd',0],['ay',0]];
const sortedItems = arr
.sort((a, b) => a[0] > b[0])
.sort((a, b) => a[0].length > b[0].length)
console.log(sortedItems)
&#13;