【问题标题】:How to find all objects with a false value within an array?如何在数组中找到所有具有错误值的对象?
【发布时间】:2014-06-02 00:40:05
【问题描述】:

在 Javascript 中这样的数组中获取所有具有 false 值的对象键的正确方法是:

[
  { unknownkey1 : false },
  { unknownkey2 : true  },  
  { unknownkey3 : false },
  { unknownkey4 : true  },
  { unknownkey5 : false },
  { unknownkey6 : true  }
]

结果应该是一个包含所有值为 false 的键的数组。

我想要的是一个更清洁的解决方案:

for(var i = 0; i < results.length; i++ ){

    for ( key in results[i] ) {

      if ( results[i].hasOwnProperty( key ) && results[i][key] === false ){

         console.log( key );

      }

    }

}

如果值不为假,则它包含另一个对象。但它们不是必需的,如果可能的话,我更喜欢忽略子对象的方法。

【问题讨论】:

  • 没有。如果不是假的,它包含另一个对象。但它们不是必需的,如果可能的话,我更喜欢忽略子对象的方法。

标签: javascript arrays object key hasownproperty


【解决方案1】:

您想要遍历数组,然后遍历每个对象中的每个键,然后将这些 false 键存储在另一个数组中。很简单。

var data = [
  { unknownkey1 : false },
  { unknownkey2 : true  },  
  { unknownkey3 : false },
  { unknownkey4 : true  },
  { unknownkey5 : false },
  { unknownkey6 : true  }
];

var keys = [];

data.forEach(function(object) {
    for (var key in object) {
        if (object[key] === false) keys.push(key);
    }
});

【讨论】:

  • 这是唯一的方法吗?循环中的循环也循环遍历每个不需要的子对象?我编辑了这个问题。如果该值不为 false,则它是另一个对象。
  • @user2429266 如果您永远不会在对象中拥有多个键,那么显然可以不使用内部循环。但如果是这样的话,你为什么要使用数组呢?
  • 我没有找到更好的方法来更好地处理我的情况。起初我试图让它工作..也许在那之后,一旦我理解了整个过程,我就试图弄清楚数组概念被弃用了。这对我来说很棘手。执行所有异步操作并跟踪错误值出现的位置,并在异步操作完成后使用来自 src 的数据进行更新,该数据不发送任何内容来识别密钥。我得到的只是按我要求的顺序排列的数据。嵌入。这对我来说很难,因为我还没有真正深入接触过所有这些异步函数。
  • 如果我仔细看看...是的。数组概念可能不需要..但那是在它起作用后要弄清楚的东西。^^
  • 不用担心,以后总会有更多的时间来清理/重构东西;)
【解决方案2】:
var arr=[
  { unknownkey1 : false },
  { unknownkey2 : true  },  
  { unknownkey3 : false },
  { unknownkey4 : true  },
  { unknownkey5 : false },
  { unknownkey6 : true  }
]

// You can return a key for false values and nothing for true, 
// then filter out the empty indexes:

var falsies= arr.map(function(itm){
    return itm[Object.keys(itm)[0]]==false? Object.keys(itm)[0]:''}).
    filter(Boolean);

/*  returned value: (Array)
unknownkey1,unknownkey3,unknownkey5
*/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2015-09-16
    • 2022-01-11
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多