2011-09-11 10 views
1

Iした2つの配列: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

アンディの回答は素晴らしいですが、キーと値が完全に一致していないとどうなりますか?文字列を数値に変換するには、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); 

チェックtest case on jsFiddle

+0

そうですが、数字の単語の例はおそらく自分の問題を説明するだけで、実際のコードでは他の値を使用していました。 :) – Andy

+0

@Andy、おそらく。うまくいけば、誰か他の人が私の答えを使います。 – 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()を持つ配列のプロトタイプを拡張する必要があります。