2017-05-09 169 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

那麼我該怎麼做?我正在考慮將所有對象複製到數組中,並檢查是否爲空 –