从javascript对象中删除空字符串或未定义的属性

时间:2019-10-31 13:14:25

标签: javascript

我有一个像这样的javascript对象:

filters = { loaderId:1111, search : '', postCategory: '', sortBy:'' }

我想删除空白属性(空字符串,未定义,null),但保留属性为0。

我该如何用javascript做到这一点,我本来可以用lodash omit来做到这一点,但现在已经弃用了,谢谢!!

5 个答案:

答案 0 :(得分:1)

你可以

function clean(obj) {
  for (let propName in obj) { 
    if (obj[propName] === null || obj[propName] === undefined || obj[propName] === '') {
      delete obj[propName];
    }
  }
}

或者类似

const removeEmpty = obj => {
  Object.keys(obj).forEach(key => (obj[key] == null || obj[key] == undefined || obj[key] === '') && delete obj[key]);
};

答案 1 :(得分:0)

您可以使用此功能:

function clearEmpty(obj) {
    return Object.keys(obj).reduce((acc, key) => {
        if(obj[key] !== null && obj[key] !== undefined && obj[key] !== '') {
            acc[key] = obj[key];
        }

        return acc;
    }, {});
}

我将返回一个新对象,而不是变异原始对象,以防您可能需要保留它。

答案 2 :(得分:0)

var filters = {
  loaderId: 1111,
  search: 0,
  postCategory: "",
  sortBy: ""
};

for (var prop in filters) {
  if (!filters[prop] && filters[prop] !== 0)
    delete filters[prop];
}
console.log(filters)

答案 3 :(得分:0)

omitBy不在roadmap上,不推荐使用。如果您的项目中已经有lodash,则只需执行以下操作:

_.omitBy(obj, v => v !== 0 && !v);

答案 4 :(得分:0)

单行解决方案:

 Object.fromEntries(Object.entries(input).filter(x => x[1] !==''));

Object.entries = 
[
  [ 'loaderId', 1111 ],
  [ 'search', '' ],
  [ 'postCategory', '' ],
  [ 'sortBy', '' ]
]

以下返回['loaderId',1111]

Object.entries(input).filter(x => x[1] !=='')

并在下面将其转换为对象:

{ 'loaderId' : 1111 }