我有一个对象列表:
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)) {
}
}
}
答案 0 :(得分:1)
您可以在.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);
答案 1 :(得分:0)
通常,效率不等于优雅,但是,如果您正在寻找一种简短而优雅的方法,则可以使用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
的值为真,则仅增加一个计数器。
答案 2 :(得分:0)
从技术上讲,您可以使用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);
在此处进一步阅读:
我希望这会有所帮助!