首页 > 解决方案 > JavaScript:从对象数组中删除空/未定义/空属性

问题描述

我有一个对象数组,想要删除 null/undefined/empty 元素...

例子:-

[
  {
    'Name': 'Sorav',
    'Phone': '9090909090',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Gaurav',
    'Phone': '',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Stack',
    'Phone': '',
    'Class': 'A',
    'Age': null
  }
]

预期输出:-

[
  {
    'Name': 'Sorav',
    'Phone': '9090909090',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Gaurav',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Stack',
    'Class': 'A'
  }
]

标签: javascriptarrays

解决方案


您可以使用 lodash 的pickBy

let data = [
  {
    'Name': 'Sorav',
    'Phone': '9090909090',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Gaurav',
    'Phone': '',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Stack',
    'Phone': '',
    'Class': 'A',
    'Age': null
  }
];

data = _.map(data, e => 
  _.pickBy(e, _.identity)
);

console.log(data);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>

另一个使用 JavaScript 的解决方案.reduce

let data = [
  {
    'Name': 'Sorav',
    'Phone': '9090909090',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Gaurav',
    'Phone': '',
    'Class': 'A',
    'Age': '25'
  },
  {
    'Name': 'Stack',
    'Phone': '',
    'Class': 'A',
    'Age': null
  }
];

data = data.map(item => 
  Object.entries(item).reduce((acc, [key, value]) => {
    if (value) {
      acc[key] = value;
    }
    return acc;
  }, {})
);

console.log(data);


推荐阅读