【发布时间】:2021-02-25 23:38:46
【问题描述】:
Lodash 扁平化嵌套列表。
我的 Typescript 脚本中有一个函数,用于转换一些对象。
不幸的是,有些对象是嵌套的,所以返回类型有时会是一个嵌套列表。
const values: (IRobotics | IRobotics[][])[] //this is an interface type i described
我使用 LoDash FlatMap 函数尝试将其展平,但它仍然为每个对象提供一个嵌套级别。
当响应到来时,它只删除外部列表。
我最初尝试使用_.flatMap() 函数,
const parsedValues = _.flatMap(values) as IRobotics[];
然而,嵌套列表中的值仍然嵌套了一层太深(例如,参见图片)。
类型是正确的,但我只想要一个对象列表而不是嵌套列表(在 IRobotics[][] 的示例中会发生这种情况)
有人有一个很好的解决方案来从这里展平一个条件两层数组吗?
整个函数供参考。 values 属性是返回初始值的地方
static createFromeData(item: EveryMatrix) {
const values = Object.entries(item).map(entry => {
return this.createFromEntry(entry);
});
const nestedValues = values.filter(entry => Array.isArray(entry));
const parsedValues = _.flatMap(values) as IRobotics[];
const IRobotics = new IRoboticsEveryMatrix(parsedValues);
return IRobotics;
}
【问题讨论】:
-
我不知道如何为 lodash 回答这个问题,但截至 ES2019,JavaScript 有 Array.prototype.flat()(以及
flatMap,但你不是映射,只是扁平化)可以将like this 与depth参数一起使用,并且输出自动是您想要的。如果您的运行时环境没有flat(),您可以填充它。
标签: node.js typescript lodash