【问题标题】:Find length of empty attributes in nested JavaScript object查找嵌套 JavaScript 对象中空属性的长度
【发布时间】:2021-11-14 07:21:41
【问题描述】:
有没有办法计算嵌套对象中空属性的总数?
[{
"name": test,
"id" : "",
"rating": {
"title": "",
"type": "book",
"star": 2
}
}]
我已经尝试过Object.keys(data).length,但显然这不会让我返回嵌套的。
任何建议都会有所帮助。
【问题讨论】:
标签:
javascript
arrays
json
object
【解决方案1】:
您可以使用Array.reduce() 创建一个递归函数来迭代所有值,如果一个值也是一个对象(或数组),则在嵌套对象上调用该函数:
const isNonNullObject = obj => typeof obj === 'object' && obj !== null
const countEmpty = obj =>
Object.values(obj)
.reduce((acc, v) => {
if(v === '') return acc + 1
if(isNonNullObject(v)) return acc + countEmpty(v)
return acc
}, 0)
const arr = [{"name":"test","id":"","rating":{"title":"","type":"book","star":2}}]
const result = countEmpty(arr)
console.log(result)
【解决方案2】:
使用递归reduce:
let data = [{"name": "test","id" : "","rating": {"title": "","type": "book","star": 2}}];
let count = data.reduce(function recur(sum, obj) {
return sum + (obj === ""
|| Object(obj) === obj
&& Object.values(obj).reduce(recur, 0));
}, 0);
console.log(count);