首页 > 解决方案 > 如何从对象中删除“未定义”值

问题描述

我有一个像这样的对象

const obj = {a: 123, b: 'text', c: [1,2,3]}

我将它用于路由参数,但c可以是一个空数组,我不必处理 a 和 b 因为它们肯定会有价值。我必须手动省略cfromobj吗?只做{a: 123, b: 'text'}

如果值未定义,有什么方法我不必手动从对象中省略属性?

标签: javascriptobjectecmascript-6

解决方案


如果你正在使用lodash,你可以使用omitBy

_.omitBy({a: 123, b: 'text', c: undefined}, _.isUndefined)

此外,您可以通过链组合许多条件

_({a:123,b:'text',c:undefined,d:null})
          .omitBy(_.isUndefined)
          .omitBy(_.isNull).value();

或者

您可以引入一个函数来帮助您省略每个对象的未定义值

const obj = {a: 123, b: 'text', c: undefined};

const omitObj = obj => Object.keys(obj).reduce((acc, key) => {
 if (obj[key] === undefined) {
    return acc;
 }
 acc[key] = obj[key];
 return acc;
}, {})


const newObj = omitObj(obj);
console.log(newObj);


推荐阅读