Javascript按子数组排序数组

时间:2017-02-15 13:55:16

标签: javascript arrays sorting

如何通过第二个元素对数组进行排序,第二个元素也是一个只包含一个元素的数组?

例如,以下数组

array = [
    ["text", ["bcc"], [2]],
    ["text", ["cdd"], [3]],
    ["text", ["aff"], [1]],
    ["text", ["zaa"], [5]],
    ["text", ["d11"], [4]]
];

应按如下方式排序:

sorted_array = [
    ["text", ["aff"], [1]],
    ["text", ["bcc"], [2]],
    ["text", ["cdd"], [3]],
    ["text", ["d11"], [4]],
    ["text", ["zaa"], [5]]
];

6 个答案:

答案 0 :(得分:2)

您可以使用sort()这样的方法。

var array = [
    ["text", ["bcc"], [1]],
    ["text", ["cdd"], [1]],
    ["text", ["aff"], [1]],
    ["text", ["zaa"], [1]],
    ["text", ["d11"], [1]]
];

var result = array.sort((a, b) => a[1][0].localeCompare(b[1][0]))
console.log(result)

答案 1 :(得分:2)

您应该使用接受.sort()功能的callback方法。

此外,您必须使用.localeCompare方法才能比较两个strings

array = [
    ["text", ["bcc"], [1]],
    ["text", ["cdd"], [1]],
    ["text", ["aff"], [1]],
    ["text", ["zaa"], [1]],
    ["text", ["d11"], [1]]
];
var sortedArray=array.sort(callback);
function callback(a,b){
  return a[1][0].localeCompare(b[1][0]);
}
console.log(sortedArray);

答案 2 :(得分:2)

您可以使用String#localeCompare对嵌套元素进行排序。

var array = [["text", ["bcc"], [2]], ["text", ["cdd"], [3]], ["text", ["aff"], [1]], ["text", ["zaa"], [5]], ["text", ["d11"], [4]]];

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

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 3 :(得分:2)

您可以通过在数组排序函数中传递比较子级数组来实现它

array = [
    ["text", ["bcc"], [1]],
    ["text", ["cdd"], [1]],
    ["text", ["aff"], [1]],
    ["text", ["zaa"], [1]],
    ["text", ["d11"], [1]]
];

function Comparator(a, b) {
   if (a[1] < b[1]) return -1;
   if (a[1] > b[1]) return 1;
   return 0;
}

array = array.sort(Comparator);
console.log(array);

希望有所帮助

答案 4 :(得分:1)

你可以这样做:

array.sort(function(a, b) { 
    if (a[1][0] > b[1][0])
        return 1;
    else if (a[1][0] < b[1][0])
        return -1;
    return 0; 
});

答案 5 :(得分:1)

(仅适用于现代JavaScript引擎)

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