检查数组是不是有大于指定的数字

Posted

技术标签:

【中文标题】检查数组是不是有大于指定的数字【英文标题】:Checking whether array has a number bigger than specified检查数组是否有大于指定的数字 【发布时间】:2021-10-17 19:57:50 【问题描述】:

我想写一个函数,它以数组为参数并返回有多少个数可以除以 12。但是,如果数组有一个大于 111 的数字,那么它应该返回 0; 我是这样写的:

function isDivisble(array) 
  let numberOfNum = 0;
  for(let i=0; i < array.length; i++) 
    if(array[i] % 12 == 0 && array[i] < 111) 
      numberOfNum = numberOfNum + 1 ;
     else 
      numberofNum = 0;
    
  
  return console.log(numberOfNum);


let test = [12, 24, 36, 44, 55, 255];


isDivisble(test)

我意识到这段代码单独检查当前数字是否可整除且不大于 111,而不是全局检查数组是否有大于 111 的数字,但我不明白如何进行一般数组检查。 是否用 if 语句编写 for 循环进行检查,然后在 if 语句中编写另一个 for 循环使其有点意大利面?

【问题讨论】:

【参考方案1】:

你可以先用 some 来检查是否有任何大于 111 的元素。 然后您可以使用过滤器来获取可被 12 整除的元素。 像这样:

const isDivisible = (arr) => 
    if (arr.some((e) => e > 111)) return 0;
    return arr.filter((e) => e % 12 === 0).length;
;
const test = [12, 24, 36, 44, 55, 48];
console.log(isDivisible(test));

【讨论】:

【参考方案2】:

我稍微修改了你的函数,如果一个数字大于 111 则返回 0,否则它会检查它是否能被 12 整除

function isDivisble(array) 
  let count = 0;
  for(let i=0; i<array.length; i++)
    if(array[i] > 111)
        return 0;
    else
        if(array[i] % 12 === 0)
        count++
      
    
  
  return count;



let test = [12, 24, 36, 44, 55, 255];
console.log(isDivisble(test));

【讨论】:

【参考方案3】:

some 数组方法可以解决问题:

array.some(value =&gt; return value &gt; 111 ) 将在其任何值大于 111 时返回 true。

您还可以通过使用array.every 和类似的回调来检查每个数组值是否符合特定条件:

array.every(value =&gt; return value &lt;= 111 ) 仅当数组中的每个值都小于或等于 111 时为真。

【讨论】:

【参考方案4】:

最好的通用解决方案是下面的 oene 逻辑

过滤数组以获取大于111 的数字。如果此过滤器返回一个长度大于 1 的数组,则返回 0 Else 过滤数组中可被 12 整除的数字。无需检查数字是否小于 111。因为如果该数字大于111,该函数可能已经返回0。 重新调整上述过滤器的长度。

工作小提琴

function isDivisbleGeneric(arr) 
    const numberGreaterThanLimit = arr.filter((node) => node > 111);
    let returnCount;
    if(numberGreaterThanLimit.length > 0) 
        returnCount = 0;
     else 
        const divisibleBy12 = arr.filter((node) => node %12 === 0);
        returnCount = divisibleBy12.length;
    
    return returnCount;

let test = [12, 24, 36, 44, 55, 255];
const count = isDivisbleGeneric(test);
console.log(count);

单线解决方案

const isDivisbleOneLine = (arr) => arr.filter((node) => node > 111).length > 0 ? 0 : arr.filter((node) => node %12 === 0).length;
let test = [12, 24, 36, 44, 55, 255];
const count = isDivisbleOneLine(test);
console.log(count);

【讨论】:

OP 声明如果数组的任何单个成员大于或等于 111,则该函数应返回 0。【参考方案5】:

function isDivisble(array) 

  // at the beginning, do from here
  if (array.some(p=>p > 111)) 
    return 0;
  

  // Rest xxxxxx

【讨论】:

这是不正确的。 else 会将可被 12 整除的值的计数清零。

以上是关于检查数组是不是有大于指定的数字的主要内容,如果未能解决你的问题,请参考以下文章

php检查数组中的特定值是不是包含大于0的值[重复]

Python检查一个值是不是大于数组/向量中的下一个值[重复]

如何检查数组中的数字是不是相等?

在二分查找中,为啥不先检查要查找的元素是不是小于或大于数组的最小或最大索引?

检查数组中的最后一个元素是不是匹配条件

检查当前循环迭代是不是大于前一个