Javascript 从对象中删除空对象、数组、字符串或整数

Javascript 从对象中删除空对象、数组、字符串或整数,javascript,node.js,object,ecmascript-6,Javascript,Node.js,Object,Ecmascript 6,我发现以下代码段不起作用,并决定将其隔离到nodejs脚本中: const _ = require('lodash'); let derpObject = { foo: "hey", bar: "", foo2: [], bar2: {} } function cleanObject(params) { const newObject = Object.keys(params).forEach( key => { console.log(

我发现以下代码段不起作用,并决定将其隔离到nodejs脚本中:

const _ = require('lodash');

let derpObject = {
    foo: "hey",
    bar: "",
    foo2: [],
    bar2: {}
}

function cleanObject(params) {
    const newObject = Object.keys(params).forEach( key => {
    console.log(params[key]);
        if(_.isNil(params[key]) || _.isEmpty(params[key])) {
      delete params[key]
    }
    });
  console.log('here', newObject);
  return newObject;
}

let result = cleanObject(derpObject);
console.log(result);
基本上,我的目的是检查主对象中哪些属性是空的或null的,并删除它们,最后返回新对象,其中只包含非空/null属性

但是,运行上述脚本输出:

hey

[]
{}
here undefined
undefined
=> undefined
知道我为什么变得不明确吗?我已经用它敲了我的头一段时间了

。forEach()
不会返回任何内容。因此,
未定义的
输出,您可以尝试将值分配给新对象,避免更改原始对象:

函数cleanObject(参数){
const newObject={};
Object.keys(params).forEach(key=>{
//console.log(参数[key]);
if(!(124;.isNil(params[key])| 124;.isEmpty(params[key])){
newObject[key]=params[key]
}
});
//log('here',newObject);
返回newObject;
}
让derpObject={
福:“嘿”,
酒吧:“,
foo2:[],
bar2:{}
}
函数cleanObject(params){
const newObject={};
Object.keys(params).forEach(key=>{
//console.log(参数[key]);
if(!(124;.isNil(params[key])| 124;.isEmpty(params[key])){
newObject[key]=params[key]
}
});
//log('here',newObject);
返回newObject;
}
让结果=cleanObject(derpObject);
控制台日志(结果)
.forEach()
不返回任何内容,因此
未定义
输出时,您可以尝试将值分配给新对象并避免更改原始对象:

函数cleanObject(参数){
const newObject={};
Object.keys(params).forEach(key=>{
//console.log(参数[key]);
if(!(124;.isNil(params[key])| 124;.isEmpty(params[key])){
newObject[key]=params[key]
}
});
//log('here',newObject);
返回newObject;
}
让derpObject={
福:“嘿”,
酒吧:“,
foo2:[],
bar2:{}
}
函数cleanObject(params){
const newObject={};
Object.keys(params).forEach(key=>{
//console.log(参数[key]);
if(!(124;.isNil(params[key])| 124;.isEmpty(params[key])){
newObject[key]=params[key]
}
});
//log('here',newObject);
返回newObject;
}
让结果=cleanObject(derpObject);
控制台日志(结果)

我想你就快到了。我稍微更改了逻辑,以便在值有效(not为nil或not为空)时添加对象键和值


我想你快到了。我稍微更改了逻辑,以便在值有效(not为nil或not为空)时添加对象键和值

您可以结合使用and

代码:

const derpObject={
福:“嘿”,
酒吧:“,
foo2:[],
bar2:{}
}
常量cleanObject=(o)=>对象
.钥匙(o)
.减少((a,k)=>{
如果(!(124; isNil(o[k])| 124; isEmpty(o[k])){
a[k]=o[k]
}
归还
},{})
const result=cleanObject(derpObject)
console.log(结果)
您可以与和组合使用

代码:

const derpObject={
福:“嘿”,
酒吧:“,
foo2:[],
bar2:{}
}
常量cleanObject=(o)=>对象
.钥匙(o)
.减少((a,k)=>{
如果(!(124; isNil(o[k])| 124; isEmpty(o[k])){
a[k]=o[k]
}
归还
},{})
const result=cleanObject(derpObject)
console.log(结果)

forEach
不返回任何内容您正在变异原始对象,因此只需执行
返回参数
为什么不利用Lodash函数:
\u0.filter(derpObject,(e)=>!\u0.isEmpty(e))
forEach
不返回任何内容您正在变异原始对象,所以只需执行
返回参数
为什么不利用Lodash函数:
.filter(derpObject,(e)=>!\u.isEmpty(e))
function cleanObject(params) {
    let newObject = {};
    Object.keys(params).forEach( key => {
        console.log(params[key]);
        if(!_.isNil(params[key]) || !_.isEmpty(params[key])) {
            newObject[key] = params[key]
        }
    });
  console.log('here', newObject);
  return newObject;
}