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
. :-)
添加回答
举报