我需要测试一组累积奖金结果。我需要一个函数,如果所有结果都相同,则返回true;如果它们不同,则返回false

这是我到目前为止所拥有的:

  • 我了解语法
  • 我正在努力理解逻辑

const testJackpot = result => {
  if (!result.length) 
    return true;
    
  return result.reduce((a,b) => {
    return (a === b) ? a : (!b);
  }) === result[0];
}

console.log(testJackpot(["@","@","@"]))

该代码似乎可以正常运行,但是,我不完全知道该怎么做。

以下原因的原因:

if (!result.length) 
  return true;

我需要帮助来了解.reduce()方法在这里的运行方式。

zhuji111 回答:我需要测试一组累积奖金结果。我需要一个函数,如果所有结果都相同,则返回true;如果它们不同,则返回false

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

大家都在问