为什么 omit() 不在映射后删除未定义的值?

Why isn't omit() removing the undefined values after mapping?

我正在使用以下 Lodash 链接实用程序来 map/flat 并排列并生成一个新的,同时排除未定义的值。

const array = _(resp.data)
   .omit(_.isUndefined)
   .flatMap('building')
   .value()
console.log(array)

这是结果:

如您所见,仍包含未定义的值。这是为什么?

编辑:

resp.data 看起来像这样

[
  { username: '', building: [ name: '' ] }
  { username: '', building: [ name: '' ] }
  // etc...
]

编辑2:

那些 undefined 值可能是对象所具有的空值 building

试试这个。

const array = _(resp.data)
.omit(_.isUndefined)
.flatMap('building')
.map()
.omit(_.isUndefined)
.value()

额外的 undefined 值应属于 resp.data 中的 user,其中不存在 building。您所要做的就是 _.filter() _.flatMap().

之后 undefined_.identity() 的所有值

注意:使用 _.omit 应该只用于对象,在数组的上下文中使用它(例如 _.flatMap() 会产生一个数组)会产生一个对象的结果,其中每个项目的索引是它在数组中的索引。您应该改用 _.filter()

var data = [
  { username: 'user1', building: [ { name: 'building1' } ] },
  { username: 'user2', building: [ { name: 'building2' } ] },
  { username: 'user3' }
];

var result = _(data)
  .flatMap('building')
  .filter(_.identity)
  .value();

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.11.2/lodash.js"></script>