2017-09-24 41 views
1

我有兩個數組。第一個包含單詞,第二個 - 它們的權重。它們與指數相關聯。我怎樣才能排序這些數組的第二個數組,維護關聯?這種關聯分類方式安全使用嗎?

這是我已經嘗試:

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'鑰匙?這不僅會讓你的代碼更加清晰,而且它也能保證正常工作 – 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,請參閱編輯。 –

+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

相關問題