我目前正在进行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我忘了代码审查社区更适合 - 你是正确的,这将是一个更适合。下次我会在那里发帖。谢谢! –