我有一种情况,至今我一直无法找到满意的解决方案。以下是高层次的代码。JavaScript内部循环中的延迟时间为
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9],
o = {a:1, b:2, c:3, d:10, e:11, f:12, g:7, h:8, i:9};
function matched(i, j) {
return a[i]===o[j];
}
for (var i=0; i<a.length; ++i) {
for (var j in o) {
if (matched(i, j)) console.log(a[i]);
}
}
我有一个数组和一个对象。我循环访问数组,然后是对象,通过函数matched()
查找匹配项,该函数返回布尔值true
或false
。如果条件是true
,那么我记录数组项目。如果您现在运行代码(https://jsfiddle.net/thdoan/0tubbokj/),您应该看到数字1-3和7-9输出到控制台。
我想要做的是在每个数字之间输出带有一秒延迟的数字。我知道如何在每个循环迭代之间引入延迟,但我只想为打印的数字添加延迟(即当matched()
返回true
时)。
澄清:我目前的解决方案,我不满意,是将匹配的项目保存到一个单独的数组,并在延迟迭代该数组,但我正在寻找一种解决方案,不需要创建一个新的数组。
您需要为递归。使用递归函数更改循环for()。如果你不能,你可以'setTimeout(function(){console.log(result);},1000);'但它不好。 –
@MarcosPérezGude可以在小提琴或codepen中演示您的解决方案,因为我无法使其工作。谢谢。 – 10basetom
我的建议等于TJCrowder的答案。 –