为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2021-10-07 20:19:48
鉴于我想比较两个同样长的数组,如果它们在同一位置具有相同的值,我可以使用循环但没有 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 语句呢?编辑:每次有比赛时,计数器都会增加一。奖励:我可以使用其他循环吗?(哪一个)?
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

有几种方法可以避免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. :-)


查看完整回答
反对 回复 2021-10-07
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信