javascript - 我想知道我是否可以在没有 if 语句的情况下比较两个数组项

标签 javascript loops

鉴于我想比较两个同样长的数组,如果它们在相同位置具有相同的值,我可以使用循环但不使用 IF 语句来执行此操作吗?

这段代码有效

function twoArrays(arr, arr2) {
    var count = 0;
    arr.forEach (function(item, index){
        if(arr[item, index]===arr2[item, index]) {
            count++
        }
    })
    return count
}

twoArrays([2,3,4,6],[2,1,4,5])
// return 2

但是如果没有 if 语句呢?

编辑:每次匹配时,计数器都会加一。 奖励:我可以使用其他循环吗? (哪个)?

最佳答案

有几种方法可以避免 if 语句,但不清楚为什么要这样做。

首先是使用filter:

var count = arr1.filter(function(item, index) { return item === arr2[index]; }).length;

...但它会创建一个不必要的数组(暂时)。

实例:

function twoArrays(arr1, arr2) {
    return arr1.filter(function(item, index) { return item === arr2[index]; }).length;
}
console.log(twoArrays([2,3,4,6],[2,1,4,5]));

第二种是使用&&:

var count = 0;
arr1.forEach(function(item, index) { item === arr2[index] && ++count; });

...但它实际上只是伪装的if&& 评估其左侧操作数,如果该操作数为假,则将该假值作为其结果(然后在上面丢弃);如果左侧操作数的值为真值,&& 计算其右侧操作数并将其作为结果。这意味着只有当左侧操作数的值为真时,右侧操作数的副作用才会发生,这就是 ++count 起作用的原因。

实例:

function twoArrays(arr1, arr2) {
    var count = 0;
    arr1.forEach(function(item, index) { item === arr2[index] && ++count; });
    return count;
}
console.log(twoArrays([2,3,4,6],[2,1,4,5]));

同样,您可以将条件运算符与 forEach 一起使用:

var count = 0;
arr1.forEach(function(item, index) { count += item === arr2[index] ? 1 : 0; });

...或使用reduce:

var count = arr1.reduce(function(acc, item, index) { return acc + (item === arr2[index] ? 1 : 0); }, 0);

实例:

function twoArraysA(arr1, arr2) {
    var count = 0;
    arr1.forEach(function(item, index) { count += item === arr2[index] ? 1 : 0; });
    return count;
}
console.log(twoArraysA([2,3,4,6],[2,1,4,5]));

function twoArraysB(arr1, arr2) {
    return arr1.reduce(function(acc, item, index) { return acc + (item === arr2[index] ? 1 : 0); }, 0);
}
console.log(twoArraysB([2,3,4,6],[2,1,4,5]));

...但是,这里仍然有条件逻辑。


我不推荐他们中的任何一个。只需使用 if。 :-)

关于javascript - 我想知道我是否可以在没有 if 语句的情况下比较两个数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57823685/

相关文章:

javascript - Onkeypress 更新输入落后 1 步

Python 分类命令

php - 在php中的foreach循环中获取特定记录

javascript - Jquery 选择器 : whenever a user clicks on the Category 1/2/3, 其 `<ul>` 将可见

javascript - 尝试使用 jQuery 后加载一个 div

javascript - 从一个 div 过渡到另一个 div

loops - for循环中的变量范围

python - 没有循环的多个 numpy 点产品

JQuery 使用each()作为每个循环的经典,而不是一次全部循环

javascript - 在 meteor 收集文档中插入值