我如何调整此代码,使其仅返回null,undefined或空值

时间:2018-12-03 14:40:11

标签: javascript arrays node.js null return

nodeJS完全陌生,请耐心等待。

关于我要创建的功能,我需要一些帮助,基本上,我正在尝试使用过滤器从对象返回所有空,空或未定义的值,但不确定如何去做。

这是我在网上找到的一些代码,该代码显示如何删除空值,而不是删除,我希望它显示所有为null,未定义或为空的值(这将包括键和值)。

代码如下:

const myObj = { 
  a: 1,
  b:'foo',
  c: '',
  d: null,
  e: undefined,
  f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
  };

const removeEmpty = (obj) => {
  Object.keys(obj).forEach(k =>
    (obj[k] && typeof obj[k] === 'object') && removeEmpty(obj[k]) ||
    (!obj[k] && obj[k] !== undefined)
  );
  return obj;
};

console.log(removeEmpty(myObj));

非常感谢所有帮助。

感谢阅读

3 个答案:

答案 0 :(得分:1)

不确定您的代码片段在哪里,但是似乎并没有以任何方式修改对象。以下内容应该可以正常工作,并通过注释可以帮助您更好地理解它。由于对象是通过引用传递的,因此我们可以递归处理作为处理嵌套案例的对象的任何属性。

const myObj = { 
  a: 1,
  b:'foo',
  c: '',
  d: null,
  e: undefined,
  f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
  };

const removeEmpty = (obj) => {
  Object.keys(obj).forEach(k => {//for each property of the object
    if(obj[k] === null){
      delete obj[k];//special case for null since typeof null returns "object" :-(
    }else if(typeof obj[k] === 'object'){//if the property IS an object
      removeEmpty(obj[k]);//recurse
    }else if(! obj[k]){//if property is falsey (undefined, "", 0)
      delete obj[k];//remove it from the object
    }
  });
  return obj;
};

console.log(removeEmpty(myObj));

编辑

如果要获取仅包含空值的对象,则可以这样修改代码:

const myObj = { 
  a: 1,
  b:'foo',
  c: '',
  d: null,
  e: undefined,
  f: {v: 1, w:'foo', x: '', y: null, z: undefined, m:{a:'asd'}}
  };

const removeNotEmpty = (obj) => {
  Object.keys(obj).forEach(k => {//for each property of the object
    if(typeof obj[k] === 'object' && obj[k] !== null){//if the property IS an object
      removeNotEmpty(obj[k]);//recurse
    }else if(obj[k]){//if property is truthy
      delete obj[k];//remove it from the object
    }
  });
  return obj;
};

console.log(removeNotEmpty(Object.assign({},myObj)));//make sure to copy the object if you don't want to modify the first (that's what the Object.assign is for)

答案 1 :(得分:0)

我将编写一个函数,该函数以递归方式遍历对象的所有值,并删除不需要的值。在我们的情况下,我们不需要有效的值。

我在记住代码

function deleteValues(myObj) {
   for (let key in myObj) {
      if (myObj[key]) {
        if (typeof myObj[key] == 'object') { 
          deleteValues(myObj[key]);
         } else {
            delete myObj[key];
         }
      }
    }
 }

 deleteValues(myObj);

答案 2 :(得分:0)

    for (const key in myObj) if ([null, undefined].includes(myObj[key])) console.log(`myObj[${key}] is ${myObj[key]}`);

这将向您显示该对象中的未定义或null值,这是您所需要的全部吗?除非我看错了这个问题。