Javascript null为空对象属性
出于某些原因,我需要一个函数来将具有null属性的数组中的对象转换为具有空对象属性的对象 该函数应该是递归的,并且必须适用于任何对象(深嵌套、数组中的数组、对象中的数组等) 有一个我需要的例子:Javascript null为空对象属性,javascript,Javascript,出于某些原因,我需要一个函数来将具有null属性的数组中的对象转换为具有空对象属性的对象 该函数应该是递归的,并且必须适用于任何对象(深嵌套、数组中的数组、对象中的数组等) 有一个我需要的例子: var obj = { "parent" : [ null, {"child" : 2}, {"child" : 3} ], "parent2" : { "parent3" : [ {"child" : 1}, null,
var obj = {
"parent" : [
null,
{"child" : 2},
{"child" : 3}
],
"parent2" : {
"parent3" : [
{"child" : 1},
null,
{"child" : 3}
]
},
"parent4" : [
{"child" : [
{"childa" : 1},
{"childa" : 2},
null
]
},
{"child" : [
{"childa" : 1},
null,
null
]
},
null
]
}
然后:
var obj2 = nullToEmptyObject(obj);
obj2应该是这样的:
{
"parent" : [
{},
{"child" : 2},
{"child" : 3}
],
"parent2" : {
"parent3" : [
{"child" : 1},
{},
{"child" : 3}
]
},
"parent4" : [
{"child" : [
{"childa" : 1},
{"childa" : 2},
{}
]
},
{"child" : [
{"childa" : 1},
{},
{}
]
},
{}
]
}
我还没有做任何尝试,因为我不知道如何递归。如果你能给我一个起始代码,我可以完成
谢谢伙计,如果我的英语不好,请编辑我 您可以尝试以下方法:
function nullToEmptyObject(obj){
var obj2 = {}:
for (var k in obj)
{
if (obj[k] === null)
obj2[k] = {};
else if (typeof obj[k] == "object")
obj2[k] = nullToEmptyObject(obj[k]);
else if (Array.isArray(obj[k])){
obj2[k] = []
for (i=0; i<obj[k].length; i++) {
obj2.push(nullToEmptyObject(obj[k][i]);
}
}
}
return obj2;
}
函数nullToEmptyObject(obj){
变量obj2={}:
用于(obj中的var k)
{
if(obj[k]==null)
obj2[k]={};
else if(对象的类型[k]=“对象”)
obj2[k]=nullToEmptyObject(obj[k]);
else if(Array.isArray(obj[k])){
obj2[k]=[]
对于(i=0;i您可以首先使用递归检查元素是否为object,并在
循环中使用for,检查每个元素是否为null
或保持循环,然后使用forEach
检查数组并重复相同的测试。任何时候函数发现null
都将更改为{}
var obj={“parent”:[null,{“child”:2},{“child”:3}],“parent2”:{“parent3”:[{“child”:1},null,{“child”:3}],“parent4”:[{“child”:[{“childa”:1},{“childa”:2},null]},{“child”:[{“childa”:1},null,null]},null]}
函数nullToEmptyObject(el){
//检查对象是否为not array,并使用for in循环。如果返回值为null,则更改为object,否则继续使用递归循环
if(typeof el=='object'&&!Array.isArray(el)){
对于(el中的var p){
(el[p]!==null)?nullToEmptyObject(el[p]):el[p]={}
}
//使用forEach检查数组和循环。如果返回值为null,则更改为object,否则继续使用递归循环。
}else if(Array.isArray(el)){
el.forEach(功能(e,i){
(e!==null)?nullToEmptyObject(e):el[i]={}
})
}
}
nullToEmptyObject(obj);
console.log(JSON.stringify(obj,0,4))
只需再次调用当前函数,因为多数据中的所有数据都是对象,即使您只需要检查为null
function nullToEmptyObject(o){
for(var i in o){
if(o[i] == null){
o[i] = {};
}
else{
nullToEmptyObject(o[i]);
}
}
}
nullToEmptyObject(obj);
console.log(JSON.stringify(obj,0,4));
由于OP解释说他不完全理解递归,仅仅给出代码并没有真正的帮助。你应该解释它的作用。此外,此函数不返回任何东西,这不是OP要求的用法。此外,此函数与arraysYou是对的,我根据注释更新了答案。非常感谢,如果以下内容有帮助,请参阅:“我不知道如何递归”-您是否尝试过学习它,例如?如果您不知道如何开始,请尝试在不(考虑)递归调用的情况下编写函数,对于一级嵌套对象,然后是两级深度,然后是三级…一旦您看到模式,您将知道将递归调用放在何处。