繁体   English   中英

根据对象映射检查数组中任何值是否为假的最有效方法

[英]Most efficient way to check if any values from an array are false based on object map

我正在使用具有一个布尔值的键的对象。 我试图找到一种最有效的方法来检查从数组接收的任何值是否在对象及其关联键中等于false。

例如,我有一个像这样的对象:

cars = {
  bmw: true,
  lexus: true,
  audi: false,
  mercedes: false
}

然后,我将收到一个类似的数组:

allApproved(['bmw', 'audi'])  // should return false
allApproved(['bmw', 'lexus']) // should return true

如果映射中键的任何值均为false ,我都希望函数返回false。 不管有多少(如果有)为假,我都想返回假。 如果全部正确,我将返回正确。

Array#every使用Array#every

every()方法测试数组中的所有元素是否通过提供的函数实现的测试。

 var cars = { bmw: true, lexus: true, audi: false, mercedes: false }; function allApproved(arr) { return arr.every(function(el) { return cars[el]; }); } console.log(allApproved(['bmw', 'audi'])); console.log(allApproved(['bmw', 'lexus'])); 

 cars = { bmw: true, lexus: true, audi: false, mercedes: false } function allApproved(arr) { return !arr.some(function(v) { return !cars[v]; }); } console.log(allApproved(['bmw', 'audi'])); // false console.log(allApproved(['bmw', 'lexus', 'asd'])); // true 

如果数组中没有.some()元素没有对应的true值,则所有元素都将被批准。 (请注意,如果cars没有特定品牌的条目,则此代码会将该品牌视为false 。)

最快的仍然是常规的旧循环

function allApproved(arr) {
    for (var i=arr.length; i--;) {
        if (cars[arr[i]] === false) return false;
    }
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM