2017-05-09 128 views
0

我在obj.Like得到这么多的对象这删除JavaScript对象完全

Object {MAILING ADDRESS: "P O BOX 59", APN: "066-102-11-1"} 
Object {MAILING ADDRESS: "", APN: ""} 
Object {MAILING ADDRESS: "P O BOX 3", APN: "066-105-11-1"} 
Object {MAILING ADDRESS: "", APN: ""} 

当我申请在它的Null值删除功能我得到这个

Object {MAILING ADDRESS: "P O BOX 59", APN: "066-102-11-1"} 
Object {} 
Object {MAILING ADDRESS: "P O BOX 3", APN: "066-105-11-1"} 
Object {} 

我想完全删除对象{}并且只想得到2个具有值的对象。 我删除此值的代码是

(function filter(obj_field) { 
 
    $.each(obj_field, function(key, value) { 
 
    if (value === "" || value === null) { 
 
     delete obj_field.key; 
 
    } else if (Object.prototype.toString.call(value) === '[object Object]') { 
 
     filter(value); 
 
    } else if ($.isArray(value)) { 
 
     $.each(value, function(k, v) { 
 
     filter(v); 
 
     }); 
 
    } 
 
    }); 
 
})(obj_field);

+0

http://stackoverflow.com/questions/742623/deleting-objects-in-javascript的可能的复制 – Sagar

+0

我有点相信你今天早些时候问这样的事情。但是我要再问一次,你可以举一个你问题的例子 –

+2

'delete obj_field.key' - 这会删除对象的关键字。使用'delete obj_field'来摆脱整个对象。 –

回答

0

允许美化了整个事情了一下:

mainObj={ 
Object1: {"MAILING ADDRESS": "P O BOX 59", APN: "066-102-11-1"}, 
Object2: {"MAILING ADDRESS": "", APN: ""}, 
Object3: {"MAILING ADDRESS": "P O BOX 3", APN: "066-105-11-1"}, 
Object4: {"MAILING ADDRESS": "", APN: ""} 
}; 

for(key in mainObj){ 
    if(!Object.values(mainObj[key]).some(el=>el)){ 
    delete mainObj[key]; 
    } 
} 

这将创建这样的:

mainObj={ 
    Object1,Object3 
}; 

http://jsbin.com/qazepupupi/edit?console

注:此ES6,您可以使用代码如果此代码在旧客户端浏览器上运行,请在下面输入:

for(key in mainObj){ 
    if(!Object.keys(mainObj[key]).some(function(inlinekey){ return mainObj[key][inlinekey]})){ 
    delete mainObj[key]; 
    } 
} 
+0

我想我使用的是旧版本在这个上得到错误。 '=>'。 –

+0

@TousifNoor可能更新您的浏览器... –

+0

@TousifNoor编辑工作在较旧的... –

0
(function filter(obj_field) { 
    $.each(obj_field, function(key, value) { 
    if(isEmpty(value)) { 
     delete obj_field.key; 
    } else if (Object.prototype.toString.call(value) === '[object Object]') 
    { 
     filter(value); 
    } else if ($.isArray(value)) { 
      $.each(value, function(k, v) { 
      filter(v); 
     }); 
     } 
     }); 
    })(obj_field); 

    function isEmpty(obj) { 
     for(var key in obj) { 
     if(obj.hasOwnProperty(key)) 
      return false; 
     } 
    return true; 
    } 
+0

过滤器函数会触发自己?和isEmpty函数我需要自己调用? –

+0

也许你可以添加一个解释到你的答案? :) –

0

使用delete操作删除只是一个参考,它不会删除对象本身。

var myObj = {} 
myObj.x = 30; 

console.log(myObj.x); // '30' 

delete myObj; // It will not delete the object 
console.log(myObj.x); // '30' 

delete myObj.x; // it will delete the property of the object 
console.log(myObj.x); // 'undefined' 
+0

这意味着我不能删除对象? @Rahul Kumar? –

+0

@TousifNoor - 不,你不能删除对象。请检查这个。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete –

+0

那么我该怎么做?我正在考虑将所有对象复制到数组中,并检查是否为空 –