从JavaScript对象中删除数据

时间:2014-05-23 19:40:02

标签: javascript underscore.js filtering

我有一个JavaScript对象info,当我在firebug控制台中执行_(info).values()时,我得到了。

[Object {}, Object { a=6, b=7, more...}, Object { a=2, b=21, more...}, Object {}, Object { a=2, b=9, more...}]

那么如何使用下划线过滤器或任何其他有效技术从上述Object {}对象中删除info项?

2 个答案:

答案 0 :(得分:1)

Javascript解决方案:

var ob={a:{}, b:{ a:6}, c: { a:2}};
function removeEmpty(ob){
    for(var i in ob){
        if(typeof(ob[i])=='object'){
            var keys=Object.keys(ob[i]);
            if(keys.length==0) delete ob[i];
        }
    }
}
removeEmpty(ob);
console.log(ob); // b:{a:6}, c{a:2}

答案 1 :(得分:0)

下划线

_.pick(info, _.filter(_.keys(info), function(key) {
    return _.keys(info[key]).length > 0;
}));

抽象成功能

_.filterObject = function(obj, callback) {
    return _.pick(obj, _.filter(_.keys(obj), callback))
};

_.filterObject(info, function(key) {
    return _keys(info[key]).length > 0;
})

http://jsfiddle.net/mendesjuan/2kf8C/1/

<强>解释

  • _.pick返回一个只包含传入属性的新对象

  • _.filter只返回我们想要的属性,带有键的属性

请注意,这会返回一个新对象,它不会修改原始