Javascript 从对象中删除空对象、数组、字符串或整数
我发现以下代码段不起作用,并决定将其隔离到nodejs脚本中: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(
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;
}