在递归函数中通过引用传递

时间:2018-08-09 17:21:25

标签: javascript node.js

我正在使用此功能删除对象的未定义属性:

function removeUndefinedFromObject(obj) {
    let foundNullProperty = false;
    if (!obj) return obj;
    Object.keys(obj).forEach((key) => {

        if (obj[key] && typeof obj[key] === "object") {
            foundNullProperty = foundNullProperty || this.removeUndefinedFromObject(obj[key]);
        } else if (obj[key] == null) {
            foundNullProperty = true;
            delete obj[key];
        }
    });
    return foundNullProperty;
}


removeUndefinedFromObject(myObjWithNullValues)

我希望所有null属性都将被删除。但是,函数调用前后的myObjWithNullValues值是相同的。

因此,我必须使用符合我想要的版本:

 function removeUndefinedFromObject(obj) {
     let foundNullProperty = false;
     if (!obj) return obj;
     Object.keys(obj).forEach((key) => {

         if (obj[key] && typeof obj[key] === "object") {
             foundNullProperty = foundNullProperty || this.removeUndefinedFromObject(obj[key]);
         } else if (obj[key] == null) {
             foundNullProperty = true;
             delete obj[key];
         }
     });
     return obj;
 }


 myObjWithNullValues = removeUndefinedFromObject(myObjWithNullValues)

我的问题是为什么第一个不起作用? obj的所有值都不应通过引用传递吗?

修改

我将功能改进为:

removeBadValuesFromObject(obj) {
if (!obj || typeof obj !== "object") {
  return obj;
}
Object.keys(obj).forEach((key) => {
  if (obj[key] !== null && typeof obj[key] === "object") {
    this.removeUndefinedFromObject(obj[key]);
  } else if (obj[key] === null || obj[key] === undefined || isNaN(obj[key])) {
    delete obj[key];
  }
});
return obj;

}

0 个答案:

没有答案