首页 > 解决方案 > 自然排序数组

问题描述

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

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 的顺序进行排序,而不是对这些数组的内容进行排序。

我想要的可以实现吗?

标签: javascriptsorting

解决方案


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

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; }


推荐阅读