Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JavaScript对象中删除数据_Javascript_Underscore.js_Filtering - Fatal编程技术网

从JavaScript对象中删除数据

从JavaScript对象中删除数据,javascript,underscore.js,filtering,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...}] 那么,如何使用下划线过滤器或任何其他有效技术从上述info对象中删除带有Object{}的项呢?Javascript解决方案: var ob={a:{},

我有一个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...}]
那么,如何使用下划线过滤器或任何其他有效技术从上述
info
对象中删除带有
Object{}
的项呢?

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}
强调

_.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;
})

解释

  • \拾取
    返回仅具有传入属性的新对象

  • \uU4.filter
    只返回我们想要的属性,即具有键的属性


请注意,这会返回一个新对象,它不会修改原始对象,但效果很好,但在下划线中查找了一些内容,谢谢。这与下划线的最大区别在于下划线解决方案创建了一个新对象,这会修改现有对象这正是我要查找的,我没有意识到我实际上可以用这种方式筑巢。我使用了reject,所以我想它对列表有效,但对对象无效。顺便说一句,如果我们谈论效率或处理时间,你认为哪种方法更好?假设数据元素在数百万范围内。@user3670175我不能谈论性能,因为它取决于您如何使用它。你最好自己测试一下,并在这里报告任何问题/发现。如果回答正确,请接受此答案。