自然排序一组数组

时间:2018-05-03 15:18:13

标签: javascript sorting

我需要对给出的数组进行排序。该数组看起来像这样。

var provided_array = [
    inner_array_one = ['1', '10', '11', 'Alpha', '2A'],
    inner_array_two = ['Hotdogs', 'Pies', 'Burgers', 'Kebabs', 'Tacos']
    ];

我保持这个例子尽可能小。实际上通常有十几个这样的内部阵列。

inner_array_one中的数据与inner_array_two中的数据相关。 即“2A”与“Tacos”有关。

排序需要“自然”,即10之前的2。 我需要的总体预期输出是

provided_array[
    inner_array_one['1', '2A', '10', '11', 'Alpha'],
    inner_array_two['Hotdogs', 'Tacos', 'Pies', 'Burgers', 'Kebabs']
    ];

我尝试使用javascript排序函数,但它似乎只能排序inner_arrays的顺序而不是那些所述数组的内容。

我想要的是什么?

3 个答案:

答案 0 :(得分:2)

您可以为索引获取辅助数组,并对第一个内部数组进行自然排序,并使用索引数组映射所有数组。

var arrays = [
        ['1', '10', '11', 'Alpha', '2A'],
        ['Hotdogs', 'Pies', 'Burgers', 'Kebabs', 'Tacos']
    ],
    indices = Object.keys(arrays[0]);
    
indices.sort((a, b) => arrays[0][a].localeCompare(arrays[0][b], undefined, { numeric: true, sensitivity: 'base' }));

console.log(arrays.map(a => indices.map(i => a[i])));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

这个简单的函数会在任何嵌套级别对数组进行排序:

function sortArray(arr) {
    if (!Array.isArray(arr) || !arr.length) return;
    if (Array.isArray(arr[0]))
        arr.forEach(ele => sortArray(ele));
    arr = arr.sort();
}

答案 2 :(得分:0)

您可以使用.localeCompare()的{​​{3}}选项对字母数字字符串进行自然排序。

var provided_array = [
    inner_array_one = ['1', '10', '11', 'Alpha', '2A'],
    inner_array_two = ['Hotdogs', 'Pies', 'Burgers', 'Kebabs', 'Tacos']
    ];


provided_array.forEach(item => item.sort((obj1, obj2) => obj1.localeCompare(obj2, 'en-US-u-kn-true')));


console.log(provided_array);

kn