如何使用JavaScript循环遍历不同长度的数组
How to loop through arrays of different lengths with JavaScript?
我的代码中的注释可以很好地解释这个问题。
// Find all commonNums divisible by arr && sequential that produce a whole number quotient.
// commonNums [ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75]
// arr [1,5]
// sequential [ 2, 3, 4 ]
for (var n = 0; n < commonNums.length; n++) {
for (var o = 0; o < sequential.length; o++) {
for (var p = 0; p < arr.length; p++) {
if (commonNums[n] % arr[p] === 0 && commonNums[n] % sequential[o] === 0) {
console.log(commonNums[n]);
}}}
}
由于数组的长度不同,因此简单地用一个长度为commonNums.length的循环迭代就会产生未定义的值。我的解决方案是使用3个循环,每个数组一个。
如果普通nums除以arr没有余数,并且普通nums乘以sequential没有剩余数,则返回该数字。对于arr[1,5],返回的第一个数字应该是60。
为什么这个解决方案失败了?
如果我正确理解您的问题,那么这应该会起作用。它返回60,因为这是唯一可以被其他两个数组中的每个数字整除的数字。
outerLoop:
for (var n = 0; n < commonNums.length; n++) {
for (var o = 0; o < sequential.length; o++) {
for (var p = 0; p < arr.length; p++) {
if (commonNums[n] % arr[p] != 0 || commonNums[n] % sequential[o] != 0) {
continue outerLoop;
}
}
}
console.log(commonNums[n]);
}
更新为使用lablel/continue来加快执行速度。
如果需要生成3个不同数组的所有可能的3元组,那么使用3 for循环是(唯一)的方法。(但请记住,如果你要处理大量数据,这将不会有效)
我在你的解决方案中看到的问题是,有些数字显示了两次。如果你只想把它们放在一个数组中(例如,返回它们或稍后打印它们),只需使用array.indexOf()检查它是否已经在数组中,如果不添加它。
这使用了一种更实用的方法来完成任务(返回60
作为过滤数组中的第一个元素)。
function check(common, seq) {
return common.map(function (el) {
return seq.every(function (e) {
return el % e === 0;
});
})
}
获取每组数组与commonNums
的比较结果。。。
var out = check(commonNums, arr);
var out2 = check(commonNums, sequential);
然后当CCD_ 3值在每个索引中相关时过滤掉这些数字。
var out3 = commonNums.filter(function (el, i) {
return out[i] && out2[i];
});
演示
相关文章:
- 如何从txt文件中获取要在javascript数组中使用的对象
- 在对象数组上使用map()检查差异
- 如何加载JSON数组以使用Angular-Translate翻译AngularJS网页
- 在多维数组中使用 IMG
- 比较数组并使用条件对数组列表进行排序
- 将代理与纯数组一起使用
- PDO fetchAll,fetch及其与解码JSON数组的使用
- PHP和Ajax在回调和返回数组中使用foreach循环
- 在使用promise数组时使用jQuery
- 在for循环中设置断点会导致在数组上使用原型时出错
- 在嵌入式PHP数组中使用JavaScript变量
- 如何在数组上使用 .each()
- 在数组中使用注释字符构建复杂字符串
- 使用 javascript 捕获数组并使用数组的值
- 将数组原型函数与非数组一起使用
- 为什么我的数组无法使用 innerhtml
- 如何在单个语句中的 $$('selector') 数组上使用 PrototypeJS .wrap()
- json 数组未使用 Javascript post 方法发布到 PHP
- 无法循环访问比较文本值的数组,使用量角器未定义的结果
- 动态结果数组需要使用 Angular JS 与不同布局的表绑定