【问题标题】:How to delete null object inside of an array in javascript如何在javascript中删除数组内的空对象
【发布时间】:2021-02-19 10:37:50
【问题描述】:

我有一个包含对象的 javascript ̶o̶b̶j̶e̶c̶t̶ 数组。 例如,

[{id : '11'}, null, null, {id : '12'}, {id : '13'}, {id : '13'}]

这里我想删除为空的对象。我试图遍历 ̶o̶b̶j̶e̶c̶t̶ 数组并删除空对象,但它没有遍历空元素。

//Delete NULL elements
for (var key in objData) {
    if(objData[key].length === 0){
        delete objData[key];
    }
    if (objData[key] == null || objData[key] == undefined) {
        delete objData[key];
    }
}

我在这里错过了什么?

对象甚至没有遍历空元素。

【问题讨论】:

标签: javascript object javascript-objects


【解决方案1】:

我认为您可以使用这样的过滤器方法,并且可以像这样获取更新的对象数组:

var array = [{id : '11'}, null, null, {id : '12'}, {id : '13'}, {id : '13'}];

var filtered = array.filter((el) => {
  return el != null; // here you can change condition
});

console.log(filtered);

【讨论】:

  • 这不会捕获所有虚假值,只要它为空。可以简化为:var filtered = array.filter(el => el);
  • @BrianBurton,是的,这个问题肯定只要求“空”值。
  • @ApoorvaChikara 。它确实有效。但问题是它只返回一个 key[0] 上的变量。并忽略其他变量。
  • 我没有明白“只返回键[0] 并忽略其他变量”是什么意思?能解释一下吗?
【解决方案2】:

如果您想修改现有数组而不是创建一个新数组,您可以使用 splice。

以下解决方案更加灵活,因为它可以轻松扩展以删除更深嵌套数据结构中的空值。请注意,object-scan 在后台做了很多繁重的工作(例如删除订单)

// const objectScan = require('object-scan');

const myData = [{ id: '11' }, null, null, { id: '12' }, { id: '13' }, { id: '13' }];

const prune = (data) => objectScan(['[*]'], {
  rtn: 'count',
  filterFn: ({ parent, property, value }) => {
    if (value === null) {
      parent.splice(property, 1);
      return true;
    }
    return false;
  }
})(data);

console.log(prune(myData));
// => 2
console.log(myData);
// => [ { id: '11' }, { id: '12' }, { id: '13' }, { id: '13' } ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@14.0.0"></script>

免责声明:我是object-scan的作者

【讨论】:

    【解决方案3】:

    您必须像这样过滤错误值 [{id : '11'}, null, null, {id : '12'}, {id : '13'}, {id : '13}].filter(Boolean)

    【讨论】:

    • 你能简单解释一下吗?过滤器有什么用?
    • 就像它说的那样,当满足一个或多个条件时过滤过滤器值并返回一个已过滤的新数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2015-12-24
    相关资源
    最近更新 更多