1 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個贊
有幾種方法可以避免if
聲明,但不清楚您為什么要這樣做。
第一種是使用filter
:
var count = arr1.filter(function(item, index) { return item === arr2[index]; }).length;
...但它創(chuàng)建了一個不必要的數(shù)組(臨時)。
現(xiàn)場示例:
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偽裝。&&評估其左側(cè)操作數(shù),如果該操作數(shù)為假,則將該假值作為其結(jié)果(然后在上面將其丟棄);如果左側(cè)操作數(shù)的值為真,則&&評估其右側(cè)操作數(shù)并將其作為結(jié)果。這意味著只有在左側(cè)操作數(shù)的值為真時才會發(fā)生右側(cè)操作數(shù)的副作用,這就是為什么++count有效。
現(xiàn)場示例:
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]));
同樣,您可以使用條件運(yùn)算符,或者與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);
現(xiàn)場示例:
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
. :-)
添加回答
舉報(bào)