如何从对象中删除“未定义”值

时间:2019-07-15 03:17:33

标签: javascript object ecmascript-6

我有一个这样的物体

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

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

如果值未定义,是否有任何方法无需手动从对象中忽略属性?

2 个答案:

答案 0 :(得分:1)

如果您使用的是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);

答案 1 :(得分:0)

如果您不确定最后一个参数

只做一个条件语句

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

var AnotherObj = obj
if (AnotherObj.c == undefined)
    delete AnotherObj.c

如果obj.c被定义,一切都会很好

否则它将从对象中删除第三个参数