繁体   English   中英

JavaScript:从对象数组中删除空/未定义/空属性

[英]JavaScript: Remove null/undefined/empty attributes from an array of objects

我有一个对象数组,想要删除空/未定义/空元素...

例子:-

[
  {
    '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'
  }
]

您可以使用 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);

您可以通过循环遍历对象数组并检查每个键中的值是否为空来执行此操作:

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

for (let i = 0; i < objs.length; i++ ) {
    for (el in objs[i]) {
        if (objs[i][el] === null || objs[i][el] === '')
        delete objs[i][el]
    }
}

console.log(objs);

结果将是:

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

如果数据来自 JSON 字符串,则可以使用JSON.parseJSON.stringify对其进行过滤:

 var json = JSON.stringify( [ { 'Name': 'Sorav', 'Phone': '9090909090', 'Class': 'A', 'Age': '25' }, { 'Name': 'Gaurav', 'Phone': '', 'Class': 'A', 'Age': '25' }, { 'Name': 'Stack', 'Phone': '', 'Class': 'A', 'Age': null } ] ) var result = JSON.parse(json, (k, v) => v === '' || v === null ? void 0 : v) console.log( result )

假设该数组称为array

const filtered = array.map(elem => {
  for (const key of Object.keys(elem)) {
    if (!elem[key]) {
      delete elem[key]
    }
  }

  return elem
}).filter(elem => Object.keys(elem).length > 0)

您还可以使用reduce来组合mapfilter步骤,并避免对array进行第二次迭代

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM