В настоящее время я работаю над вызовом Codewars, http://www.codewars.com/kata/your-order-please. Задача состоит в том, чтобы взять строку и переупорядочить слова в соответствии со значением, найденным в каждом слове строки, например: «is2 Thi1s T4est 3a», функция должна вернуть «Thi1s is2 3a T4est».JavaScript while loop efficiency/performance
Я написал решение, которое успешно передает все предоставленные тесты и возвращает правильную строку. 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, но я знаю, что, хотя петли (и, вероятно, для вложенных внутри себя) могут быть очень дорогими операциями. Кто-нибудь знает, почему это может занять слишком много времени? Есть ли вопиющие проблемы с производительностью, которые я не вижу? Или, может быть, лучший подход? Благодаря!
Это может быть лучше подходит для http://codereview.stackexchange.com/ – 1252748
@thomas Я забыл о сообществе codereview - вы правы, это было бы лучше. В следующий раз я отправлю туда. Благодаря! –