检查数组中是否有一个数字大于指定值

6

我希望编写一个函数,该函数以数组作为参数,并返回可以被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,但我不知道如何进行全局数组检查。 编写for循环并使用if语句进行检查,然后在if语句内部再编写另一个for循环是否有些复杂了?

5个回答

9

你可以使用 some 方法检查是否有大于111的元素。 然后,您可以使用 filter 方法获取可被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));


5

我稍微修改了你的函数,如果一个数字大于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 => { return value > 111 }) 如果数组中任意一个值大于111,则会返回true.

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

array.every(value => { return value <= 111 }) 只有当数组中的每个值都小于或等于111时才为true。


1
最佳通用解决方案如下: 逻辑
  • 过滤大于111的数字数组。如果此过滤器返回长度大于1的数组,则返回0
  • 否则,过滤可被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。 - Pointy

-1

function isDivisble(array) {

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

  // Rest xxxxxx
}


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接