[英]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);
在此处进一步阅读:
我希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.