【问题标题】:Filtering array so it would remove all undefined objects过滤数组,以便删除所有未定义的对象
【发布时间】:2018-11-12 09:01:05
【问题描述】:

我需要过滤一个数组,以便从中删除未定义的对象。

我尝试使用 lodash _.filter 但没有成功(返回完全空的数组)

_.filter(myArray, _.isEmpty)

我使用的是 Angular 6,所以任何带有 typescript 或 lodash 的东西都是完美的。

【问题讨论】:

    标签: arrays angular object lodash


    【解决方案1】:

    使用Javascript也可行。支持null,undefined,0,empty。

    newArray = myArray.filter(item=> item);
    

    【讨论】:

      【解决方案2】:

      更简单的方法:

      _.filter(myArray, Boolean)
      

      这消除了空值、0 和未定义的数组。

      【讨论】:

      • 非常感谢,因为这是我会接受这个答案的最干净的方式。
      【解决方案3】:

      更简单的方法

      _.filter(myArray, function(o) { return o !== undefined });
      

      【讨论】:

        【解决方案4】:

        你不需要图书馆; the Javascript array type has a filter method:

        var filteredArray = myArray.filter(item => item !== undefined);
        

        【讨论】:

          【解决方案5】:

          lodashfilter 函数中,如果回调(您作为参数传递)返回该元素被认为保留在结果数组中的真实值,否则(如果返回虚假)它将不会保留该元素元素。您的 isEmpty 返回 true 如果它是空的,因此结果会保留这些值(nullundefined0,...)。所以你可以使用

          _.filter(myArray, _.negate(_.IsEmpty))_.filter(myArray, v => !_.IsEmpty(v))

          以你尝试的方式

          或者,您可以直接使用_.filter(myArray),但在这种情况下它不会像_.filter(myArray, Boolean)一样删除空对象或空数组,在使用lodash的情况下不需要传递Boolean

          如果您不想否定并想要一个更简单的解决方案来删除所有空元素,那么您可以使用

          _.reject(myArray, _.isEmpty)

          【讨论】:

            【解决方案6】:
            var newArray = array.filter(arrayItem => arrayItem)
            

            它将过滤数组,以便删除所有未定义的对象并分配给名为 newArray 的新变量

            【讨论】:

            • 虽然这可能会回答作者的问题,但它缺少一些解释性文字和/或文档链接。如果没有围绕它们的一些短语,原始代码 sn-ps 并不是很有帮助。您可能还会发现how to write a good answer 非常有帮助。请编辑您的答案 - From Review
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-08-28
            • 1970-01-01
            • 1970-01-01
            • 2016-07-15
            • 1970-01-01
            • 2017-05-19
            • 2021-10-22
            相关资源
            最近更新 更多