如何删除JavaScript对象中为undefined或null的所有属性?
(问题类似于阵列的this one )
发布于 2008-11-13 03:18:39
您可以遍历对象:
var test = {
  test1: null,
  test2: 'somestring',
  test3: 3,
}
function clean(obj) {
  for (var propName in obj) {
    if (obj[propName] === null || obj[propName] === undefined) {
      delete obj[propName];
    }
  }
  return obj
}
console.log(test);
console.log(clean(test));
如果您担心此属性删除不会运行对象的proptype链,您还可以:
function clean(obj) {
  var propNames = Object.getOwnPropertyNames(obj);
  for (var i = 0; i < propNames.length; i++) {
    var propName = propNames[i];
    if (obj[propName] === null || obj[propName] === undefined) {
      delete obj[propName];
    }
  }
}关于null和undefined的一些注意事项:
test.test1 === null; // true
test.test1 == null; // true
test.notaprop === null; // false
test.notaprop == null; // true
test.notaprop === undefined; // true
test.notaprop == undefined; // true发布于 2016-03-08 23:27:49
如果您使用的是lodash或underscore.js,这里有一个简单的解决方案:
var obj = {name: 'John', age: null};
var compacted = _.pickBy(obj);这将只适用于lodash 4,pre lodash 4或underscore.js,使用_.pick(obj, _.identity);
发布于 2014-06-13 01:18:00
如果有人需要欧文(和埃里克)答案的递归版本,那就是:
/**
 * Delete all null (or undefined) properties from an object.
 * Set 'recurse' to true if you also want to delete properties in nested objects.
 */
function delete_null_properties(test, recurse) {
    for (var i in test) {
        if (test[i] === null) {
            delete test[i];
        } else if (recurse && typeof test[i] === 'object') {
            delete_null_properties(test[i], recurse);
        }
    }
}https://stackoverflow.com/questions/286141
复制相似问题