繁体   English   中英

遍历对象列表并检查属性值

[英]Iterating through object list and check property value

我有一个对象列表:

var myObj = {
   obj1: {name: "bob", employed: true},
   obj2: {name: "dave", employed: false},
   obj3: {name: "james", employed: true},
}

遍历对象列表并计算有多少对象相等的最有效/最优雅的方法是什么employed: true 有没有简短的方法来写这个? 我正在考虑如下实现它:

const countEmployed = () => {
    for (let key in myObj) {
      if (myObj .hasOwnProperty(key)) {
      }
    }
}

你可以使用.reduce()Object.values()使用的布尔值employed多项加总,像这样:

 const myObj = { obj1: {name: "bob", employed: true}, obj2: {name: "dave", employed: false}, obj3: {name: "james", employed: true}, }; const sum = Object.values(myObj).reduce((t, {employed}) => t+employed, 0); console.log(sum);

通常高效并不等于优雅,但是如果您正在寻找一种简短而优雅的方法,您可以使用Array#filter

 const myObj = { obj1: {name: "bob", employed: true}, obj2: {name: "dave", employed: false}, obj3: {name: "james", employed: true}, }; const r = Object.values(myObj).filter(({ employed }) => employed).length; console.log(r);

但是,最有效的方法可能是使用 for in 循环,如果employed值为真,则只增加一个计数器。

从技术上讲,您可以使用Object.values()首先获取所有属性值。 然后你可以使用Array.filter()来只获取必要的。

基于此,我将执行以下操作:

 const myObj = { obj1: {name: "bob", employed: true}, obj2: {name: "dave", employed: false}, obj3: {name: "james", employed: true}, } const result = Object.values(myObj).filter(e => e.employed); console.log('Count:', result.length);

在此处进一步阅读:

  1. Array.prototype.filter()
  2. Object.values()

我希望这有帮助!

暂无
暂无

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

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