鉴于我想比较两个同样长的数组,如果它们在相同位置具有相同的值,我可以使用循环但不使用 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/