Javascript数组排序

Javascript - arrays sorting

本文关键字:数组排序 Javascript      更新时间:2023-09-26

我有两个数组:

keys_array   = [2,4,5,8,9]
values_array = ['two','four','five','eight','nine']

我需要得到:

#transitional result
#values sorted alphabetically
sorted_by_value_name_array = [
  ['8','eight'],
  ['5','five'],
  ['4','four'],
  ['9','nine'],
  ['2','two']
]
#final result  
sorted_keys_array = [8,5,4,9,2]

如何使用javascript或jQuery实现这一点?

var keys_array   = [2,4,5,8,9];
var values_array = ['two','four','five','eight','nine'];
var new_array = [];
for(var i=0; i<keys_array.length; i++){
    new_array.push([keys_array[i],values_array[i]]);
}
console.log(new_array.sort(function(a,b){ return a[1] < b[1] ? -1 : 1; }));

Andy的回答很好,但如果键和值没有完全对齐呢?然后,您需要JavaScript才能将字符串解释为数字。

我找到了斯蒂芬·查普曼的一个有效的单词到数字转换器。通过在另一个函数中使用这一点,我们可以或多或少地拥有任何数字单词,并将其与相应的数字组合。而且他们一开始甚至不需要对齐。

// paste the toWords function here
function naturalCombine(numbers, words) {
    var numberCount = numbers.length,
        combined = [];
    for (var i=0; i < numberCount; i++) {
        var word = toWords(numbers[i]).trim(),
            found = words[words.indexOf(word)];
        if (found)
            combined.push([numbers[i], found]);
        else
            combined.push([numbers[i], "unknown"]);
    }
    return combined;
}
var keysArray = ["4", "62", "2", "94", "5", "9", "8", "87", "1674"];
var valuesArray = ["two", "one thousand six hundred seventy four", "four", 
                   "five", "eight", "nine", "eighty seven", "ninety four"];
var combined = naturalCombine(keysArray, valuesArray);

检查jsFiddle 上的测试用例

var keys_array = [2,4,5,8,9],
    values_array = ['two','four','five','eight','nine'];
var svalues = values_array.slice().sort(), // copy array and sort it
    skeys = [];
for(var i = 0, s = svalues.length; i < s; i++){
    skeys.push(keys_array[values_array.indexOf(svalues[i])]);
}

演示

您需要使用indexOf()扩展数组原型,使其能够与不支持它的浏览器一起工作。