为什么 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>
我正在使用以下 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>