我需要对给出的数组进行排序。该数组看起来像这样。
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的顺序而不是那些所述数组的内容。
我想要的是什么?
答案 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);