array.prototype.every() 方法用于判断数组中所有元素是否都满足指定条件,只有全部满足才返回 true,否则返回 false;2. 它具有“短路”特性,一旦发现不满足条件的元素会立即停止遍历,提升性能;3. 与 some()(至少一个满足)和 filter()(筛选出满足条件的元素)不同,every() 强调“全员通过”,逻辑上是“与”关系;4. 对于空数组,every() 默认返回 true,若需避免此行为应先检查数组长度;5. 在复杂数据验证场景(如表单、对象数组校验)中,every() 能确保数据一致性,使代码简洁高效;6. 使用时应注意避免在回调函数中产生副作用,并正确处理 this 上下文,推荐使用箭头函数以保持上下文正确。

在JavaScript中,如果你想快速判断一个数组里的所有元素是不是都满足某个特定条件,
Array.prototype.every()
false
true
// 假设我们有一个数字数组,想检查是不是所有数字都大于0
const numbers = [1, 5, 8, 10];
const allPositive = numbers.every(num => num > 0);
console.log(allPositive); // true
const mixedNumbers = [1, -2, 5, 8];
const allPositiveMixed = mixedNumbers.every(num => num > 0);
console.log(allPositiveMixed); // false (因为-2不满足条件,every会立即停止并返回false)
// 验证一个对象数组中,所有对象是否都有某个属性且其值符合要求
const users = [
{ id: 1, active: true },
{ id: 2, active: true },
{ id: 3, active: false }
];
const allUsersActive = users.every(user => user.active === true);
console.log(allUsersActive); // false (因为id为3的用户不活跃)
// 对于空数组,every() 总是返回 true。这有时候会让人觉得有点反直觉,
// 但从逻辑上讲,“所有元素都满足条件”对于一个没有元素的数组来说,确实是成立的。
const emptyArray = [];
const allElementsMatch = emptyArray.every(item => item > 0);
console.log(allElementsMatch); // trueevery()
true
every()
true
false
这几个数组方法,初看起来都像是遍历数组,但它们的目的和行为模式其实大相径庭。理解它们之间的区别,能帮助你更精准地选择工具。
every()
element1 && element2 && ... && elementN
every()
some()
element1 || element2 || ... || elementN
true
some()
const products = [
{ name: 'Laptop', price: 1200, inStock: true },
{ name: 'Mouse', price: 25, inStock: false },
{ name: 'Keyboard', price: 75, inStock: true, onSale: true }
];
// every(): 所有商品都在库存中吗?
const allInStock = products.every(p => p.inStock);
console.log('所有商品都在库存中吗?', allInStock); // false (因为Mouse不在库存)
// some(): 有商品在打折吗?
const anyOnSale = products.some(p => p.onSale);
console.log('有商品在打折吗?', anyOnSale); // true (因为Keyboard在打折)而
filter()
filter()
// filter(): 给我所有库存中的商品
const availableProducts = products.filter(p => p.inStock);
console.log('库存中的商品:', availableProducts);
/*
[
{ name: 'Laptop', price: 1200, inStock: true },
{ name: 'Keyboard', price: 75, inStock: true, onSale: true }
]
*/所以,这三者各有侧重,
every()
some()
filter()
every()
想象一下,你正在开发一个表单,用户需要输入一系列的联系人信息,每个联系人对象都必须包含
name
every()
const contacts = [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'bob@example.com' },
{ name: 'Charlie', email: 'charlie.example.com' } // 邮箱格式不正确
];
// 一个简单的邮箱格式验证函数
const isValidEmail = (email) => {
// 实际项目中会用更复杂的正则,这里简化一下
return email && email.includes('@') && email.includes('.');
};
// 验证所有联系人信息是否都有效
const allContactsValid = contacts.every(contact => {
return contact.name && typeof contact.name === 'string' && isValidEmail(contact.email);
});
console.log('所有联系人信息都有效吗?', allContactsValid); // false
// 如果数据是这样的:
const validContacts = [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'bob@example.com' }
];
const allValid = validContacts.every(contact => {
return contact.name && typeof contact.name === 'string' && isValidEmail(contact.email);
});
console.log('所有联系人信息都有效吗?', allValid); // true这里,
every()
every()
从性能角度看,
every()
false
for
if
break
然而,在使用
every()
空数组的默认行为: 前面提到了,
every()
true
false
every()
const users = []; const allUsersActive = users.length > 0 && users.every(user => user.active); console.log(allUsersActive); // false (符合期望)
回调函数的副作用:
every()
every()
this
every()
this
undefined
this
every()
this
this
const validator = {
threshold: 10,
checkAll: function(arr) {
// 使用箭头函数,this 会正确指向 validator
return arr.every(num => num > this.threshold);
}
};
console.log(validator.checkAll([12, 15, 11])); // true
console.log(validator.checkAll([8, 15, 11])); // false理解这些细节,能帮助你更稳健地运用
every()
以上就是js 怎样用every验证数组所有元素是否匹配的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号