【发布时间】:2018-11-12 09:01:05
【问题描述】:
我需要过滤一个数组,以便从中删除未定义的对象。
我尝试使用 lodash _.filter 但没有成功(返回完全空的数组)
_.filter(myArray, _.isEmpty)
我使用的是 Angular 6,所以任何带有 typescript 或 lodash 的东西都是完美的。
【问题讨论】:
标签: arrays angular object lodash
我需要过滤一个数组,以便从中删除未定义的对象。
我尝试使用 lodash _.filter 但没有成功(返回完全空的数组)
_.filter(myArray, _.isEmpty)
我使用的是 Angular 6,所以任何带有 typescript 或 lodash 的东西都是完美的。
【问题讨论】:
标签: arrays angular object lodash
使用Javascript也可行。支持null,undefined,0,empty。
newArray = myArray.filter(item=> item);
【讨论】:
更简单的方法:
_.filter(myArray, Boolean)
这消除了空值、0 和未定义的数组。
【讨论】:
更简单的方法
_.filter(myArray, function(o) { return o !== undefined });
【讨论】:
你不需要图书馆; the Javascript array type has a filter method:
var filteredArray = myArray.filter(item => item !== undefined);
【讨论】:
在 lodash 的filter 函数中,如果回调(您作为参数传递)返回该元素被认为保留在结果数组中的真实值,否则(如果返回虚假)它将不会保留该元素元素。您的 isEmpty 返回 true 如果它是空的,因此结果会保留这些值(null,undefined,0,...)。所以你可以使用
_.filter(myArray, _.negate(_.IsEmpty)) 或 _.filter(myArray, v => !_.IsEmpty(v))
以你尝试的方式
或者,您可以直接使用_.filter(myArray),但在这种情况下它不会像_.filter(myArray, Boolean)一样删除空对象或空数组,在使用lodash的情况下不需要传递Boolean
如果您不想否定并想要一个更简单的解决方案来删除所有空元素,那么您可以使用
_.reject(myArray, _.isEmpty)
【讨论】:
var newArray = array.filter(arrayItem => arrayItem)
它将过滤数组,以便删除所有未定义的对象并分配给名为 newArray 的新变量
【讨论】: