This question already has answers here:
Remove blank attributes from an Object in Javascript

(40个答案)


3年前关闭。




有一种干净的方法可以从对象中删除未定义的字段?

IE。
> var obj = { a: 1, b: undefined, c: 3 }
> removeUndefined(obj)
{ a: 1, c: 3 }

我遇到了两种解决方案:
_.each(query, function removeUndefined(value, key) {
  if (_.isUndefined(value)) {
    delete query[key];
  }
});

或者:
_.omit(obj, _.filter(_.keys(obj), function(key) { return _.isUndefined(obj[key]) }))

最佳答案

使用 ES6 箭头功能和三元运算符的单线:

Object.keys(obj).forEach(key => obj[key] === undefined ? delete obj[key] : {});
或者使用短路评估而不是三元评估:(@ Matt Langlois,感谢您提供信息!)
Object.keys(obj).forEach(key => obj[key] === undefined && delete obj[key])
使用if语句的相同示例:
Object.keys(obj).forEach(key => {
  if (obj[key] === undefined) {
    delete obj[key];
  }
});
如果还要从嵌套对象中删除项目,则可以使用递归函数:
const removeEmpty = (obj) => {
  let newObj = {};
  Object.keys(obj).forEach((key) => {
    if (obj[key] === Object(obj[key])) newObj[key] = removeEmpty(obj[key]);
    else if (obj[key] !== undefined) newObj[key] = obj[key];
  });
  return newObj;
};

07-26 09:30