在JavaScript对象数组中查找属性是否有效

Find if a Property is Valid inside JavaScript Array of Objects

本文关键字:属性 是否 有效 查找 JavaScript 对象 数组      更新时间:2023-09-26

我在JavaScript数组中有一个Customer对象集合。

var customer = Customer(); 
customer.firstName = "John"; 
customer.isEnabled = true 
var customer2 = Customer(); 
customer2.firstName = "Mary"; 
customer2.isEnabled = false
var customers = [customer,customer2]; 

现在,如果customers数组属性"isEnabled"=false中的任何对象,我希望返回true。基本上,我想要一种方法来验证数组中每个对象(客户)的属性。

更新:

因此,使用一些功能,我可以做这样的事情:

customers.some(e => e.isEnabled == true) 

因此,现在只有当数组中的所有元素都将isEnabled属性设置为true时,它才会返回true。是这样吗?

您想要的是Array.prototype.some或Array.prototype.every

以下是在您的情况下如何使用它:

var customers = [
    { firstName: "John", isEnabled: true },
    { firstName: "Mary", isEnabled: false },
];
var goodCustomers = [
    { firstName: "George", isEnabled: true },
    { firstName: "Sandra", isEnabled: true },
];
function isNotEnabled(customer) {
    return !customer.isEnabled;
}
function isEnabled(customer) {
    return customer.isEnabled;
}
customers.some(isNotEnabled);
//=> true
goodCustomers.some(isNotEnabled);
//=> false
customers.every(isEnabled);
//=> false
goodCustomers.every(isEnabled);
//=> true

函数库对于这类问题也很好,这里有一个Ramda示例,只是为了好玩:

R.all(R.prop("isEnabled"), customers);
//=> false
R.any(R.compose(R.not, R.prop("isEnabled")), customers);
//=> true

使用every方法:

customers.every(function(v){ return v.isEnabled;  }); // will return true if every object 'is enabled'

如果使用Undercore.js,可以使用_.where()函数。

_.where(customers, {isEnabled: true});

签出lodash库。它已经为您编写了许多这样的函数。