如何从JavaScript对象字面量统计指定属性值的数量?
统计对象中值为"nursery"的孩子数量
嘿,我来帮你搞定这个问题!你的需求是统计对象里值为"nursery"的属性数量,先看看你之前的代码为什么没成功,再给你几个靠谱的实现方法。
你的代码问题分析
你写的这段代码:
var kkr = (kids.dipok).toString.length,count; if(kkr>=1){ ++count; console.log(count); }
有几个关键问题:
- 只检查了
kids.dipok这一个属性,没有遍历整个对象的所有属性,根本没法统计所有符合条件的项; toString.length写法错误:toString是方法,调用需要加(),而且kids.dipok本身就是字符串,完全不需要转换;另外你判断的是字符串长度,而不是值是否等于"nursery",逻辑方向错了;count变量没有初始化,默认是undefined,执行++count会得到NaN,结果肯定不对。
正确的实现方法
这里给你三种常用的实现方式,选你觉得顺手的就行:
方法1:传统for...in循环(兼容旧环境)
var kids = { dipok: "nursery", bonku: "LKG-1", jaya: "LKG-2", Raj_Kumar: "nursery" }; var count = 0; // 遍历对象的每个属性键 for (var key in kids) { // 确保只统计对象自身的属性(避免继承的原型属性) if (kids.hasOwnProperty(key)) { // 判断当前属性值是否为"nursery" if (kids[key] === "nursery") { count++; } } } console.log(count); // 输出:2
方法2:ES6 Object.values() + filter(简洁直观)
如果你的运行环境支持ES6(比如现代浏览器、Node.js),这种写法更简洁:
var kids = { dipok: "nursery", bonku: "LKG-1", jaya: "LKG-2", Raj_Kumar: "nursery" }; // 获取对象所有值,过滤出等于"nursery"的项,再取长度 var count = Object.values(kids).filter(value => value === "nursery").length; console.log(count); // 输出:2
方法3:ES6 reduce统计(灵活扩展)
如果以后需要更复杂的统计逻辑,reduce会更灵活:
var kids = { dipok: "nursery", bonku: "LKG-1", jaya: "LKG-2", Raj_Kumar: "nursery" }; // 累加符合条件的数量 var count = Object.values(kids).reduce((total, currentValue) => { return currentValue === "nursery" ? total + 1 : total; }, 0); // 初始值设为0 console.log(count); // 输出:2
内容的提问来源于stack exchange,提问作者Aritra
相关产品推荐
相关产品推荐

