2017-04-05 106 views
1

卸下空或空值我有以下JavaScript對象:從物體

var items = [ 
    { 
     item1: '', 
     item2: 'foo' 
    }, 
    { 
     item1: 'bar' 
     item2: '' 
    } 
]; 

我希望移除所有鍵/值對,其中值可以是空的或無效。以下看起來沒有按預期工作:

$.each(items, function(i,v){ 
    $.each(items[i], function(i2, v2){ 
     if (v2 === "" || v2 === null){ 
      delete items[i2]; 
     } 
    }); 
}); 
console.log(items); 

控制檯日誌返回以下錯誤:Uncaught TypeError: Cannot read property 'length' of undefined

如何正確地獲得此項工作?

回答

2

對於使用jQuery .each一個解決方案:

var items = [{ 
 
    item1: '', 
 
    item2: 'foo' 
 
}, { 
 
    item1: 'bar', 
 
    item2: '' 
 
}]; 
 

 
$.each(items, function(i, v) { 
 
    $.each(v, function(i2, v2) { 
 
    if (v2 === "" || v2 === null) { 
 
     delete v[i2]; 
 
    } 
 
    }); 
 
}); 
 
console.log(items);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

delete部分是完全錯誤的位置:

delete items[i2]; 

您正試圖從items中刪除一個屬性(例如item1),而不是從項目本身中刪除。

2

用簡單的Javascript,你可以迭代數組和所有的鍵,並檢查空字符串或null值,然後刪除if。

var items = [{ item1: '', item2: 'foo' }, { item1: 'bar', item2: '' }]; 
 

 
items.forEach(function (o) { 
 
    Object.keys(o).forEach(function (k) { 
 
     if (o[k] === '' || o[k] === null) { 
 
      delete o[k]; 
 
     } 
 
    }); 
 
}); 
 

 
console.log(items);

+0

我想我試圖不必要地過分複雜化,你的解決方案要好得多。 – Ryan