一、Array.some
方法
1. Array.some
描述
some()
为数组中的每一个元素执行一次callback
函数,直到找到一个使得 callback 返回一个“真值”(即可转换为布尔值 true 的值)。如果找到了这样一个值,some()
将会立即返回true
。否则,some()
返回false
。
some()
被调用时不会改变数组。如果用一个空数组进行测试,在任何情况下它返回的都是
false
。
1.1 Array.some
语法
arr.some((element, index, array) => {
/* … */ } )
arr.some(function(element, index, array) {
/* … */ }, thisArg)
参数
element
:数组中正在处理的元素。index
:数组中正在处理的元素的索引值。array
:被调用的数组。
1.2 Array.some
返回值
数组中有至少一个元素通过回调函数的测试就会返回**true
**;所有元素都没有通过回调函数的测试返回值才会为 false。
2. Array.some
应用
2.1 验证Array.some
描述
let arr = [{
id: 1 }, {
id: 2 }, {
id: 3 }];
console.log(arr.some((obj) => obj.id === 2)); // 输出 true —— 描述1
console.log(arr); // 输出 [{ id: 1 }, { id: 2 }, { id: 3 }] 保持不变 —— 描述2
console.log([].some((obj) => obj.id === 2)); // 输出 false —— 描述3
2.2 验证arr.some
调用后,往arr
添加元素是否会改变some
结果
let arr = [{
id: 1 }, {
id: 2 }, {
id: 3 }];
const result = arr.some((obj, index) => {
arr.push({
id: index + 4 });
return obj.id === 4;
});
console.log(arr); // [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }]
console.log(result); // 输出 false
注:如果数组中存在且还未被访问到的元素被 callback
改变了,则其传递给 callback
的值是 some()
访问到它那一刻的值。已经被删除的元素不会被访问到
2.3 检测数组元素是否存在undefined and null and ''
let arr = [1, 2, 3, 4, 5, 6, 7];
console.log(arr.some((obj) => !Boolean(obj))); // 输出 false
let arr = [1, 2, 3, undefined, 5, 6, 7];
console.log(arr.some((obj) => !Boolean(obj))); // 输出 true
let arr = [1, null, 3, 4, 5, 6, 7];
console.log(arr.some((obj) => !Boolean(obj)));// 输出 true
2.4 将任意值转换为布尔类型
// 引用自 MDN
var TRUTHY_VALUES = [true, 'true', 1]; // 入参正确数组
function getBoolean(value) {
'use strict';
if (typeof value === 'string') {
value = value.toLowerCase().trim();
}
return TRUTHY_VALUES.some(function(t) {
return t === value;
});
}
getBoolean(false); // false
getBoolean('false'); // false
getBoolean(1); // true
getBoolean('true'); // true
getBoolean(undefined); // false
2.5 与Array.filter
联用 用于过滤符合条件的数组对象
const filterable = [1, 3, 5];
const arr = [{
id: 1 }, {
id: 2 }, {
id: 3 }, {
id: 4 }, {
id: 5 }];
const result = arr.filter((obj) => filterable.some((o) => o == obj.id));
console.log(result); // [{id: 1}, {id: 3}, {id: 5}]
Array.some
还有居多应用之处,但只要记住它的作用,相信你在处理逻辑过程能有诸多帮助。
二、Array.every
方法
1. Array.every
描述
every
方法为数组中的每个元素执行一次callback
函数,直到它找到一个会使callback
返回 falsy 的元素。如果发现了一个这样的元素,every
方法将会立即返回false
。否则,callback
为每一个元素返回true
,every
就会返回true
。
every
不会改变原数组。若收到一个空数组,此方法在任何情况下都会返回
true
。 ———— 与Array.some
相反
1.1 Array.every
语法 —— 与 Array.some
一致
arr.every((element, index, array) => {
/* … */ } )
arr.every(function(element, index, array) {
/* … */ }, thisArg)
参数
扫描二维码关注公众号,回复:
17335991 查看本文章
element
:数组中正在处理的元素。index
:数组中正在处理的元素的索引值。array
:被调用的数组。
1.2Array.every
返回值
如果回调函数的每一次返回都为 true
,返回 true
,否则返回 false
。
2. Array.every
方法
2.1 验证Array.every
描述
const arr = [1, 2, 3, 4];
console.log(arr.every((o) => o > 3)); // 输出 false
console.log(arr); // [1, 2, 3, 4]
console.log([].every((o) => o > 5)); // 输出 true
2.2 验证数组元素是否存在undefined and null and ''
const arr = [1, 2, 3, 4];
const result = arr.every((obj) => Boolean(obj));
console.log(result); // 输出 true = 不存在
const arr = [1, 2, undefined, 3, 4];
const result = arr.every((obj) => Boolean(obj));
console.log(result); // 输出 false = 存在
2.3 与Array.filter and Object.keys
过滤数组对象 属性值大于某值的对象
const arr = [
{
width: 500, height: 500 },
{
width: 300, height: 300 },
{
width: 650, height: 650 },
];
const filterArr = arr.filter((obj) => {
return Object.keys(obj).every((o) => {
return obj[o] >= 500;
});
});
console.log(filterArr); // 输出 [{ width: 500, height: 500 },{ width: 650, height: 650 }]
Array.every
还有居多应用之处,但只要记住它的作用,相信你在处理逻辑过程能有诸多帮助。
⚠:Array.some
只要回调返回一个true
即为true
,而Array.every
需全部为true
才为true