js中every和some的详细介绍

every 的介绍(ES6)

Array.every() 数组中的所有元素都符合要求,就会返回true,否则返回false。

Array.every(callbackFn(element,index,array){ return 条件判断})

注意:如果数组为空,返回 true(空数组满足所有条件,这是约定)

every的简单使用

复制代码
const array = [1, 2, 3, 4, 5];
// 检查每一个元素都大于0,如果符合要求,返回true,否则返回false
const allPositive = array.every(value => value > 0);
console.log(allPositive); // 输出: true

数组为空,every会返回true(空数组满足所有条件,这是约定)

every 不会修改原数组

every 不会改变调用它的原数组(但 callback 内部可以修改,不推荐)

不遍历空槽位,但不会跳过显示值 undefined

every 会跳过空槽位(不执行 callback),但该位置仍被视为"存在",只是不调用回调;

但不会跳过显式的 undefined 值

复制代码
const arr = [1, , 3];
// 输出 true(空槽位被跳过)
console.log(arr.every(x => x > 0));

不会跳过显式的 undefined 值

复制代码
const arr = [1, undefined, 3];
arr.every((value, index) => {
  console.log( value);
  return true;
});

every() 遇到第一个不符合条件的元素就会停止遍历

复制代码
const result = [1, 2, 3, 4].every((num) => {
  console.log('我会打印几次');
  return num < 3;
});

会打印3次;当3不符合条件时,会返回false,停止遍历。

every() 不能直接用于异步判断

复制代码
const result = [1, 2, 3].every(async (n) => {
  return n < 3;
});
console.log(result); // true

原因是 async 函数返回的是 Promise,而 Promise 对象本身是真值。

所以 every() 会认为每个都通过了。

回调返回值会被转换为布尔值

复制代码
[1, 2, 3].every((n) => n); // true
[1, 0, 3].every((n) => n); // false,因为 0 是假值

some() 的简单介绍(ES6)

some() 用于检测数组中是否有至少一个元素满足指定条件。

如果至少有一个元素满足条件,就返回 true;否则返回 false。

如果数组为空,some() 会返回 false。

Array.some(callbackFn(element,index,array){ return 条件判断})

Array.every()如果数组为空,返回 true

some的基本使用方法

复制代码
const arr = [1, 3, 5, 6, 7];
const hasEven = arr.some(num => num % 2 === 0);
console.log(hasEven); // true,因为 6 是偶数

数组为空,some会返回false

some 不会修改原数组

some 不会改变调用它的原数组(但 callback 内部可以修改,不推荐)

不遍历空槽位,但不会跳过显示值 undefined

some 会跳过空槽位(不执行 callback),但该位置仍被视为"存在",只是不调用回调

但不会跳过显式的 undefined 值

复制代码
const arr = [1, , 3];
// 输出 true(空槽位被跳过)
console.log(arr.some(x => x > 0));

但不会跳过显式的 undefined 值

复制代码
const arr = [1, undefined, 3];
arr.some((value, index) => {
  console.log(value);   
  return false;
});

some() 遇到第一个符合条件的元素就会停止遍历

复制代码
const result = [1, 2, 3, 4].some((num) => {
  console.log('我会打印几次');
  return num < 3;
});

会打印1次;当1不符合条件时,会返回true,停止遍历。

some() 不能直接用于异步判断

复制代码
const result = [1, 2, 3].some(async (n) => {
  return n > 3;
});
console.log(result); // true

原因是 async 函数返回的是 Promise,而 Promise 对象本身是真值。

所以 some() 会认为每个都通过了。

回调返回值会被转换为布尔值

复制代码
[1, 2, 3].some((n) => n); // true
[0, 0, 0].some((n) => n); // false

some和every函数的相同点

1,都不会修改原数组(但 callback 内部可以修改,不推荐)

2,不会遍历空槽位,但不会跳过显示值 undefined

3,不能直接用于异步判断

4,回调返回值会被转换为布尔值

some和every函数的不同点

1, some() 只要求一个元素符合要求,而 every() 要求所有元素都符合要求。

2, 对于空数组,some() 会返回 false,而 every() 会返回 true。【重要】

3, every() 遇到第一个不符合条件的元素就会停止遍历

some() 遇到第一个符合条件的元素就会停止遍历