使用 _.compact lodash 消除对象数组上的空值的问题

Problem Using _.compact lodash to eliminate null values on an array of objects

我正在处理从包含坐标的 http 请求中获取的对象数组,以在 google-maps 中创建标记,但我需要消除数组中的所有空值。我正在尝试使用 compact 但它返回相同的数组未更改。

//这是结果数组结构

var array=
[{"id":0,"latitude":45.17850875854492,"longitude":7.773523330688477},{"id":1,"latitude":45.122344970703125,"longitude":7.7135162353515625},{"id":2,"latitude":null,"longitude":null},{"id":3,"latitude":45.11630630493164,"longitude":7.730717658996582},{"id":4,"latitude":45.116214752197266,"longitude":7.730687141418457},{"id":5,"latitude":null,"longitude":null}]

var comp =_.compact(array) 

我在 cosole 中没有收到任何错误,但是变量 comp return 完全相同的数组,没有删除空值

你所有的值都是数组,null是你属性的一个值。 _.compact() 方法适用于原语。

使用 _.reject() 并使用 _.isNull 检查属性是否为 null,并且应删除对象:

const array =
[{"id":0,"latitude":45.17850875854492,"longitude":7.773523330688477},{"id":1,"latitude":45.122344970703125,"longitude":7.7135162353515625},{"id":2,"latitude":null,"longitude":null},{"id":3,"latitude":45.11630630493164,"longitude":7.730717658996582},{"id":4,"latitude":45.116214752197266,"longitude":7.730687141418457},{"id":5,"latitude":null,"longitude":null}]

const result = _.reject(array, ({ latitude, longitude }) =>
  _.isNull(latitude) || _.isNull(longitude)
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

您可以使用 _.pickBy()

Creates an object composed of the object properties predicate returns truthy for

lodash

这适用于对象,因此对于数组,您可以使用:

var comp = _.map(array, item => _.pickBy(item));