我们如何在for循环中检查迭代if条件



我试图在循环的内迭代检查if条件。这意味着if条件的一些表达式需要迭代生成,如下面的示例所示

let union = [1,2,3,4,5,6,7,8,9]
let control = [2,4,6]
let result = []
for(let i=0; i<union.length; i++){
if(union[i] % 2 == 0 && union[i] !== control[i]){
result.push(union[i])
}
}

在上述示例中,union[i] !== control[i]是需要迭代验证/生成的条件表达式。换句话说,我们可以将问题描述为

结果数组应仅包含并集数组中的偶数,并且不应包含控制数组中的任何元素

所以结果数组应该是[8]

结果数组应该只包含并集数组中的偶数,而不应该包含控制数组中的任何元素

let union = [1,2,3,4,5,6,7,8,9]
let control = [2,4,6]
let result = []
union.forEach(item => {
if(item % 2 == 0 && !control.includes(item)) {
result.push(item);
}
});

.includes方法检查该项是否在数组中。

或者只是一个简单的过滤器

const result = union.filter(item => item % 2 == 0 && !control.includes(item));

还有一个选项。删除两个数组之间的重复项,然后只检查偶数。

let union = [1,2,3,4,5,6,7,8,9]
let control = [2,4,6]
let result = []
union = union.filter(function(val) {
return control.indexOf(val) == -1;
});
for(let i=0; i<union.length; i++){
if(union[i] % 2 == 0){
result.push(union[i])
}
}

您可以修改检查并查看是否为control.includes(union[i])。当控件包含当前并集变量时,情况会如此。反过来也是如此,这意味着如果控制包含并集变量,则并集变量也包含控制变量。用!否定检查,看看它是否不包括此值。

let union = [1,2,3,4,5,6,7,8,9]
let control = [2,4,6]
let result = []
for(let i=0; i<union.length; i++){
if(union[i] % 2 == 0 && !control.includes(union[i])){
result.push(union[i])
}
}
console.log(result);

Array#filterSet一起使用

代码的问题是,对于union中的每一项,您都需要检查control中的每项,无论它是否存在,而您没有这样做。

我建议使用Set,而不是在数组中重复搜索。

const 
union = [1, 2, 3, 4, 5, 6, 7, 8, 9],
control = [2, 4, 6],
result = ((s) => union.filter((u) => !(u&1) && !s.has(u)))(new Set(control));
console.log(result);

最新更新