我在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。是吗?
答案 0 :(得分:3)
您想要的是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
答案 1 :(得分:0)
使用every
方法:
customers.every(function(v){ return v.isEnabled; }); // will return true if every object 'is enabled'
答案 2 :(得分:0)
如果您使用的是Underscore.js,则可以使用_.where()函数。
_.where(customers, {isEnabled: true});
答案 3 :(得分:-2)
结帐lodash库。它已经为你编写了很多这样的功能。