Javascript – 数组排序

我有两个数组:

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 

Andy的答案很棒,但是如果你的键和值没有完全对齐怎么办? 然后,您需要JavaScript才能将字符串解释为数字。

我找到了Stephen Chapman对数字转换器的工作词 。 通过在另一个函数中使用它,我们可以有或多或少的任何数字,并将它们与相应的数字组合。 而且他们甚至不必首先对齐。

 // 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()扩展数组原型,以便与不支持它的浏览器一起使用。