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() 遇到第一个符合条件的元素就会停止遍历