【问题标题】:Removing empty or null values from an object从对象中删除空值或空值
【发布时间】:2017-04-05 13:25:58
【问题描述】:

我有以下 JavaScript 对象:

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

我想删除值为空或 null 的所有键/值对。以下似乎没有按预期工作:

$.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

如何正确完成这项工作?

【问题讨论】:

    标签: javascript jquery arrays json object


    【解决方案1】:

    对于使用 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);

      【讨论】:

      • 我想我试图使这个不必要地复杂化,你的解决方案要好得多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2016-11-11
      相关资源
      最近更新 更多