2017-09-24 9 views
1

私は2つの配列を持っています。最初の単語には単語が含まれ、2番目の単語には重みが含まれます。彼らはインデックスによって関連付けられています。これらの配列を2番目の配列で並べ替えることはできますか?このソート方法は安全に使用できますか?

は、ここで私が試みられてきたものだ:

let words = [ 
 
    'car', 
 
    'house', 
 
    'sky', 
 
    'dog', 
 
    'wheel', 
 
    'man', 
 
    'tree', 
 
    'earth' 
 
]; 
 

 
let weights = [ 
 
    10, 
 
    43, 
 
    23, 
 
    95, 
 
    55, 
 
    41, 
 
    29, 
 
    84 
 
]; 
 

 
let memory = []; 
 

 
weights.sort((a, b) => { 
 
    memory.push(b - a); 
 
    return memory[memory.length - 1]; 
 
}); 
 

 
words.sort(() => memory.shift()); 
 

 
for (let i = 0; i < words.length; i++) { 
 
    console.log(words[i], weights[i]); 
 
}

それが正常に動作しているようです。しかし、私はそれがうまくいかないと思う。理論的に正しいのですか?

注意!私はあなたのアルゴリズムを修正するように求めていません。このような並べ替えの間違いについて、私はあなたに尋ねます。

+1

理由だけではなく、 'word'と' weight'などのキーを持つオブジェクトの1つの配列を作ってみませんか?それはあなたのコードをより明確にするだけでなく、正しく動作することも保証されます。 – Leva7

+0

はい、あなたは正しいです。これは別の方法で行うことができます。それは私には知られています。私は自分のアルゴリズムを最適化するための助けを求めていません。私はそれが適切に動作するのだろうかと思います。それだけです。 – vihtor

+0

はい、動作しない可能性があります。ソートアルゴリズムは常に同じであると想定することはできません。 – Bergi

答えて

0

インデックスがweightsの配列をとり、インデックスの値でソートし、ソートされたインデックス配列を取って結果をマップできます。

基本的にはsorting with mapです。

var words = ['car', 'house', 'sky', 'dog', 'wheel', 'man', 'tree', 'earth'], 
 
    weights = [10, 43, 23, 95, 55, 41, 29, 84], 
 
    temp = weights 
 
     .map((_, i) => i) 
 
     .sort((a, b) => weights[b] - weights[a]), 
 
    result_words = temp.map(i => words[i]), 
 
    result_weights = temp.map(i => weights[i]); 
 

 
console.log(result_words.map((a, i) => [a, result_weights[i]]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

単語とその重さと共に印刷する必要があります – vihtor

+0

@vihtor、editを参照してください。 –

+0

私の質問の更新をご覧ください – vihtor

0

あなたは、ソートに現在の単語要素のインデックスを使用して、同じインデックスと重みから要素の値で並べ替えることができます。

let words = ["car", "house", "sky", "dog", "wheel", "man", "tree", "earth"] 
 
let weights = [ 10, 43, 23, 95, 55, 41, 29, 84 ] 
 

 
var result = words 
 
    .map((e, i) => e + ' ' + weights[i]) 
 
    .sort(function(a, b) { 
 
    var a = a.split(' ').shift(), b = b.split(' ').shift() 
 
    return weights[words.indexOf(b)] - weights[words.indexOf(a)] 
 
    }) 
 

 
console.log(result)

+0

あなたは両方の配列をソートしません – vihtor

関連する問題