Array#reduce
是wron工具,因为它会迭代数组的所有元素,并且您得到的结果也需要在and处进行检查。
您可以改用Array#every
并对照第一个元素检查每个元素。
此方法根据需要为空数组返回true
。
const testJackpot = array => array.every((v,_,a) => v === a[0]);
console.log(testJackpot([]));
console.log(testJackpot(["@","@","@"]));
console.log(testJackpot(["@","","@"]));
,
只需使用内置在javascript数组中的“每个”方法即可。
["@","@"].every(item => item === "@")
在此处查看更多信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
,
我同意其他两个答案,使用.every()
是更好的方法。
但是,要回答您的实际问题,
if(!result.length)
return true;
Array.length如果数组为空,则返回false,即长度为零等于false。
支票返回true。
您可以将.reduce()
视为for循环。
return result.reduce((a,b) => {
return (a === b) ? a : (!b);
}) === result[0];
'a'参数是累加器/持有者和第一个迭代值,'b'是下一个迭代值
因此,这里发生的是,如果迭代值“ b”与“ a”匹配,则“ a”将返回到累加器/持有者,否则返回b。然后,在所有项目都经过迭代之后,代码将检查返回的值(累加器/持有人-在这种情况下为“ a”)是否与数组中的第一项匹配。如果所有项目都匹配,则“ a”将永远不会更改,但是一旦找到不匹配的项目,“ a”将更改并且将不再匹配第一个项目。
我希望这有助于阐明正在发生的事情。
,
您可以利用SET对象在数组中查找唯一值。
function testJackpot(arr) {
const set1 = new Set();
for (var i = 0; i < arr.length; i++) {
set1.add(arr[i])
}
if (set1.size == 1) {
return true;
}
return false;
}
console.log(testJackpot(["@","@"]))
本文链接:https://www.f2er.com/3139102.html