使用 lodash 键入错误以从对象数组创建唯一数组
Posted
技术标签:
【中文标题】使用 lodash 键入错误以从对象数组创建唯一数组【英文标题】:Type error using lodash to create a unique array from an array of objects 【发布时间】:2018-11-24 14:18:19 【问题描述】:我得到的错误是 'LoDashExplicitWrapper<string[]>' is not assignable to type 'string[]'. Property 'length' is missing in type 'LoDashExplicitWrapper<string[]>'.
使用 lodash v4.17.10
我有一个对象数组,我正在尝试获取一个数组,该数组只包含每个对象的属性的唯一值。
代码:
let carMakes: string[]
const inventory = [
make: "ford", model: "Focus" ,
make: "ford", model: "F-150" ,
make: "chevy", model: "Camaro"
carMakes = _.chain(inventory)
.map('make')
.uniq()
我有什么办法可以通过链接来完成这项工作,因为这看起来像是一个不错的干净解决方案,尽管它不起作用(在我的 Angular 项目中)
【问题讨论】:
【参考方案1】:只需使用一个普通的 js Set 和 map()
数据一次。通过使用Array.from()
直接将其重新转换为数组,您将获得所需的string[]
。
const inventory = [
make: "ford",
model: "Focus"
,
make: "ford",
model: "F-150"
,
make: "chevy",
model: "Camaro"
];
const unique = Array.from(new Set(inventory.map((make) => make)));
console.log(unique);
【讨论】:
哦,忘记了 Sets,因为我以前没有使用过它们。但是,我现在收到了这个新错误:[ts] Type 'Set<string>' is not an array type. Use compiler option '--downlevelIteration' to allow iterating of iterators.
不确定这在我的 angular-cli 项目的上下文中意味着什么。
对不起,忘记了这个专业的打字稿。我已经更新了答案,以便它适用于 ts @redOctober13
你就是炸弹,谢谢!我也喜欢解构路径。我还在学习,但是很容易将"downlevelIteration": true
添加到我的 tsconfig.json 文件中,然后它接受了解构版本。
是的,我也更喜欢解构。但是会有很多用户没有将它添加到 tsconfig...@redOctober13...我认为它最终并没有太大的区别
与 lodash 版本相比,这仍然有点难以阅读,因为它同时使用了 map
和 uniq
,并且唯一的其他词是变量和属性名称,而这个仅限 JS 的版本有 4 个新词,并且还重复了“make”。因此,如果我可以将其转换为正确的类型,我更愿意使用 lodash 版本。【参考方案2】:
我应该以前看过这个。 lodash docs 对 _.chain()
说:
创建一个 lodash 包装器实例,该实例包装值并启用显式方法链序列。此类序列的结果必须用 _#value 展开。
因此,这就是使其工作所需的全部内容:
carMakes = _.chain(inventory)
.map('make')
.uniq()
.value()
我之前尝试过这个,但是 VS Code 没有删除错误曲线 直到我奇怪地悬停在 value()
上,然后错误消失了。由于我之前没有这样做,所以我认为它不起作用。
【讨论】:
以上是关于使用 lodash 键入错误以从对象数组创建唯一数组的主要内容,如果未能解决你的问题,请参考以下文章