我目前正在進行Codewars挑戰http://www.codewars.com/kata/your-order-please。任務是取一個字符串並根據字符串的每個單詞中找到的值對單詞進行重新排序,例如:「is2 Thi1s T4est 3a」該函數應該返回「Thi1s is2 3a T4est」。JavaScript循環效率/性能
我寫了成功通過提供的所有測試,並返回正確的字符串的解決方案。 https://jsfiddle.net/louisstanard/5hygz6wb/
function order(words){
var ordered = [];
var arr = words.split(' ');
var n = 1;
while (n <= arr.length) {
for (var i = 0; i < arr.length; i++) {
var stringArr = arr[i].split('');
stringArr.forEach(function(currentValue, index) {
if (parseInt(currentValue) === n) {
ordered.push(arr[i]);
n++;
}
});
}
}
return ordered.join(' ');
}
我的問題是,當我試圖提交的解決方案,我收到一個錯誤說「過程被終止。花了超過6000ms完成」。我選擇使用while循環,因爲我想繼續遍歷字符串中的每個單詞來查找數字,直到我構建了一個長度與原始數組長度相同的新數組。
我是新來編寫更好的性能JS,但我知道,while循環(也可能一個嵌套了一會兒內)可能會非常昂貴的操作。有人知道爲什麼這可能需要很長時間才能運行嗎?我沒有看到任何明顯的性能問題嗎?或者可能是一個更好的方法?謝謝!
這可能是http://codereview.stackexchange.com/ – 1252748
@thomas我忘了代碼審查社區更適合 - 你是正確的,這將是一個更適合。下次我會在那裏發帖。謝謝! –