Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript null为空对象属性_Javascript - Fatal编程技术网

Javascript null为空对象属性

Javascript null为空对象属性,javascript,Javascript,出于某些原因,我需要一个函数来将具有null属性的数组中的对象转换为具有空对象属性的对象 该函数应该是递归的,并且必须适用于任何对象(深嵌套、数组中的数组、对象中的数组等) 有一个我需要的例子: var obj = { "parent" : [ null, {"child" : 2}, {"child" : 3} ], "parent2" : { "parent3" : [ {"child" : 1}, null,

出于某些原因,我需要一个函数来将具有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是对的,我根据注释更新了答案。非常感谢,如果以下内容有帮助,请参阅:“我不知道如何递归”-您是否尝试过学习它,例如?如果您不知道如何开始,请尝试在不(考虑)递归调用的情况下编写函数,对于一级嵌套对象,然后是两级深度,然后是三级…一旦您看到模式,您将知道将递归调用放在何处。