猿问

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

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


此代码有效


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 语句呢?


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


慕桂英3389331
浏览 159回答 1
1回答

汪汪一只猫

有几种方法可以避免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. :-)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答