只有当所有对象中的值为空时,才从对象数组中删除空值。

3

我希望能够从我的数组中删除空字符串。

这是我的数组:

let array = [{name:'John',age:'18',address:''},{name:'George',age:'',address:''},{name:'Kevin',age:'25',address:''}]

我希望仅在所有对象中的值为空时删除空字符串值。
期望结果:
[{name:'John',age:'18'},{name:'George',age:''},{name:'Kevin',age:'25'}]

这是我的做法,但它会移除所有的空字符串

 for (let i = 0; i < array.length; i++) {
 array[i] = Object.fromEntries(Object.entries(array[i]).filter(([_, v]) => v != ''));
 }

提前感谢您,


我们可以假设数组中的所有对象都是相同的(即包含相同的属性集)吗? - yuvin
@yuvin 是的,所有对象都是相同的。 - Bar Levin
3个回答

5

如果您不介意改变原始的 array 对象,这里是一个使用一些数组函数的解决方案。

let array = [
  { name: 'John', age: '18', address: '' },
  { name: 'George', age: '', address: '' },
  { name: 'Kevin', age: '25', address: '' }
]

Object.keys(array[0])
  .filter(k => array.every(obj => !obj[k]))
  .forEach(k => array.forEach(obj => delete obj[k]));

console.log(array);


3

你可以使用筛选方法解决此问题

  • 获取要在数组中扫描的所有条目
  • 对于每个条目,使用该条目对数组进行过滤;如果输出数组为空,则可以删除原始数组中的此值

    let array = [{name:'John',age:'18',address:''},{name:'George',age:'',address:''},{name:'Kevin',age:'25',address:''}]
    
    const entries = Object.keys(array[0])
    
    entries.forEach(e => {
        if(array.filter(i => i[e]).length === 0) {
          array = array.map(i => {delete i[e]; return i})
        }
    })
    
    console.log(array)


1
如果您不想改变原始数组:

let array = [{name:'John',age:'18',address:''},{name:'George',age:'',address:''},{name:'Kevin',age:'25',address:''}]


let result;

Object.keys(array[0])
.forEach(key => {
    if(array.every(e => e[key] === ''))
        result = array.map(({[key]:_,...rest}) => ({...rest}))
})

console.log(result)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接