2011-09-11 48 views
1

我有两个数组:使用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的实现这一目标?

+0

我没有看到任何排序模式? – Shef

+0

@Shef我假设他需要组合数组,按值排序并返回排序数组的键。 – JJJ

+0

值应该按字母排序 –

回答

4
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; })); 
+0

非常棒!谢谢安迪,正是我需要的! –

3

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

我发现一个工作words to numbers converter by 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); 

检查test case on jsFiddle

+0

是的,但数字的例子可能只是为了解释他的问题,而在他的真实代码中他使用了其他一些值。 :) – Andy

+0

@安迪,可能。希望别人能够使用我的答案;) – mekwall

2
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])]); 
} 

Demo

您将需要与indexOf()扩大阵列原型为它与不支持它的浏览器。