javascript 初学者,请多多包涵。
我正在尝试创建一个程序来检查对象中是否存在任何空值、空值或未定义值。它在大多数情况下似乎工作正常,但是当对象中有一个数组时,它在填充时显示为“空项”。
有人可以告诉我如何修改我的代码以便检查数组是否真的为空吗?
我的代码如下:
const myObj =
{ "tags": ["A", "B", "C"],
"shared_with": ["abc", "123"],
"list": [],
"public_jobs": true,
"config": null,
"id": 9406,
"name": "",
}
const removeNotEmpty = (obj) => {
Object.keys(obj).forEach(k => {//for each property of the object
if(typeof obj[k] === 'object' && obj[k] !== null){//if the property is an object
removeNotEmpty(obj[k]);//recurse
}else if(obj[k]){//if property is truthy
delete obj[k];//remove it from the object
}else if(obj[k] == !obj.length){
delete obj[k];
}
});
return obj;
};
// make sure to copy the object if you don't want to modify the first
// (that's what the Object.assign is for)
console.log(removeNotEmpty(Object.assign({},myObj)));
提前致谢。
编辑:所以我根据下面的建议对我的代码进行了一些编辑,现在这就是我的代码
const myObj =
{ "tags": ["A", "B", "C"],
"shared_with": ["abc", "123"],
"list": [],
"public_jobs": true,
"config": null,
"id": 9406,
"name": "",
}
const removeNotEmpty = (obj) => {
Object.keys(obj).forEach(k => {//for each property of the object
if(Object.prototype.toString.call(obj[k]) === '[object Array]'){
delete obj[k];
}else if(typeof obj[k] === 'object' && obj[k] !== null){//if the property
IS an object
removeNotEmpty(obj[k]);//recurse)
}else if(obj[k]){//if property is truthy
delete obj[k];//remove it from the object
}
});
return obj;
};
console.log(removeNotEmpty(Object.assign({},myObj)));//make sure to copy the
object if you don't want to modify the first (that's what the Object.assign
is for)
现在的问题是它不显示空数组,比如"list:[]"?大家有什么想法吗?
最佳答案
因为在 JS 中,数组是一个对象。
因此,"tags": ["A", "B", "C"]
将转到第一个 If 子句。因为它是一个对象而且不为空。如果您使用 Object.keys
迭代一个数组,它会将索引作为 Keys
返回。
因此,您需要一个条件来检查键是否为数组。这可以通过
Array.isArray(obj[k])
或
Object.prototype.toString.call(obj[k]) === '[object Array]';
编辑: 悠闲地将它添加到第一个 if 子句中。
Object.keys(obj).forEach(k => {
if(Object.prototype.toString.call(obj[k]) === '[object Array]' && obj[k].length >0 ){
//delete stuff
}else if(...//remaining code
.
.
.
});
关于Javascript - 为什么我的应用程序认为这个数组是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53651727/