map 函数返回 1 个布尔值,而不是布尔值数组

web*_*oob 3 javascript arrays map-function

假设你有一个像这样的数组:

arrayExample = [1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我想使用 map 函数迭代 arrayExample ,如果所有数字都小于 8,则返回true,否则返回false 。但是,当我这样做时,我得到了一组 true(例如:[true,true,true... 等])

我只能返回 1 个值吗?

到目前为止,这是我的代码:

arrayExample = [1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

我对“map”有点陌生,但我相信它会这样做,因为它为每个元素返回一个值,只是对如何使其返回 1 truefalse感到困惑。

eco*_*eer 7

最简单的解决方案是使用.some().

我们不需要检查每个值。我们需要找到第一个不小于8的值。

const array = [1, 2, 3, 4, 5, 6, 7]
const testBoolean = !array.some(m => m >= 8)
console.log(testBoolean)
Run Code Online (Sandbox Code Playgroud)


Nic*_*ons 6

对于这样的事情来说,这.map()不是正确的工具。.map()用于将数组中的所有元素转换为新元素(即:将每个元素映射到新的转换值)。因此,.map()将始终返回一个数组(除非故意修改此行为)。相反,您可以使用.every()它,它会告诉您数组中的所有元素是否都符合您的条件(即:如果您的函数对每个元素都返回 true,那么您将得到 true 作为结果,否则您将得到 false) 。一旦找到回调函数返回的一个元素,该方法就会提前终止.every()false有助于提高效率:

const array = [1, 2, 3, 4, 5, 6, 7];
const testBoolean = array.every(m => {
  if (m >= 8) {
    return false;
  }
  return true;
});
console.log(testBoolean);
Run Code Online (Sandbox Code Playgroud)

m < 8这可以写得更简洁,只需返回(这将评估为truefalse)的结果

const array = [1,2,3,4,5,6,7];
const testBoolean = array.every(m => m < 8);
console.log(testBoolean);
Run Code Online (Sandbox Code Playgroud)