2011-09-11 47 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()擴大陣列原型爲它與不支持它的瀏覽器。