【问题标题】:javascript (angularjs) check if value exists in js objectjavascript(angularjs)检查js对象中是否存在值
【发布时间】:2015-02-18 19:19:25
【问题描述】:

我有以下对象

{
  0 : false,
  1 : true,
  2 : false
}

我需要做的是循环遍历这些并根据条件将其中一些设置为真或假,但我需要一个函数来检查所有值是否都设置为真或对象中是否存在假。

我有以下检查值是否为假来做某事

 angular.forEach($scope.keyFiles, function (val, key) {
        if(val == false) {
              $scope.loadCanvas(key);
              return key;
        }
 });

但我现在需要检查任何值中是否存在 false 以及是否所有值都设置为 true。

我是 javascript 新手,如果这听起来像一个简单的解决方案,请原谅。

【问题讨论】:

    标签: javascript angularjs object


    【解决方案1】:

    希望这是您正在寻找的。

    function containsFalse(obj){
        for(var prop in obj){
           if(obj[prop] === false) return true;
        }
        return false;
    }
    

    【讨论】:

    • 这实际上只是一次检查一个值,看看它是假还是真。如果第一个值为真而其余值为假,则会发生这种情况,那么它将假设一切都是真的
    • @Yeak 这不是真的。用上面的代码做一个空运行。该方法在第一次遇到false 作为属性值时返回true。如果不存在这样的属性,则返回false,这是所要求的
    • 没有。 this 循环遍历对象的每个属性并检查它是否为假。如果没有,它将继续下一个属性。如果在迭代结束时没有找到,则返回 false。
    【解决方案2】:

    这是一个简单的 javascript 方法:

    var keyFiles = {
      0 : false,
      1 : true,
      2 : false
    };
    
    var falseExists = false;
    for (var prop in keyFiles) {
        if (keyFiles.hasOwnProperty(prop) && keyFiles[prop] === false) {
            falseExists = true;
            break;
        }
    }
    
    console.log(falseExists);
    

    更多关于hasOwnPropertyMDN link

    在现代浏览器(即 IE 9+、Chrome 5+ 等)中,代码可以简化如下:

    for (var prop in Object.getOwnPropertyNames(keyFiles)) {
        if (keyFiles[prop] === false) {
            falseExists = true;
            break;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-03-22
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多