【问题标题】:Remove undefined properties from object从对象中删除未定义的属性
【发布时间】:2017-07-06 15:58:05
【问题描述】:

我想递归地清理任何未定义的字段,或者有一个空对象作为父对象,如下所示:

例子:

{
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    f: undefined,
  },
  "g": {
     "h": 'I',
     "j": undefined,
  },
  "k": "L",
  "m": {
     "n": {
       "o": {
         "z": undefined,
       }
     },
    "p": 'toto'
   }
}

我期待以下结果:

{
  "g": {
    "h": 'I',
  },
  "k": 'L',
  "m": {
    "p": 'toto'
  }
}

感谢您的帮助

【问题讨论】:

标签: javascript object recursion undefined


【解决方案1】:

function filter(obj) {
  for (var key in obj) {
    if (obj[key] === undefined) {
      delete obj[key];
      continue;
    }
    if (obj[key] && typeof obj[key] === "object") {
      filter(obj[key]);
      if (!Object.keys(obj[key]).length) {
        delete obj[key];
      }
    }
  }
  return obj;
}

var data = {
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    "f": undefined,
  },
  "g": {
    "h": 'I',
    "j": undefined,
  },
  "k": "L",
  "m": {
    "n": {
      "o": {
        "z": undefined,
      }
    },
    "p": 'toto'
  }
};

console.log(filter(data));

只需删除这些键并递归迭代。

【讨论】:

  • 也应该删除空对象
  • typeof null === "object。您可能想要更改为:if(obj[key] && typeof obj[key] === "object").
  • @ibrahimmahrir 也是原语上的任何对象包装器。 String()、Number() 等
  • @Joelito 它只是在修改原始对象。现在它也将返回修改后的对象。立即尝试
【解决方案2】:

function cleanArray(actual) {
  var newArray = new Object();
 newArray=JSON.parse(JSON.stringify(actual));
  return newArray;
}
var obj={
  "a": {
    "b": {
      "c": undefined,
    }
  },
  "d": undefined,
  "e": {
    f: undefined,
  },
  "g": {
     "h": 'I',
     "j": undefined,
  },
  "k": "L",
  "m": {
     "n": {
       "o": {
         "z": undefined,
       }
     },
    "p": 'toto'
   }
};
console.log(cleanArray(obj));

【讨论】:

  • 同样在 Internet Explorer 中,按 F12 检查控制台
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 2020-05-30
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
相关资源
最近更新 更多