使用lodash键入错误以从对象数组创建唯一数组

时间:2018-06-14 18:20:22

标签: arrays typescript unique lodash

我使用 lodash v4.17.10

获得的错误是'LoDashExplicitWrapper<string[]>' is not assignable to type 'string[]'. Property 'length' is missing in type 'LoDashExplicitWrapper<string[]>'.

我有一个对象数组,我试图获得一个只在每个对象上只有一个属性的唯一值的数组。

代码:

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项目中)

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我以前应该看过这个。 _.chain()的{​​{3}}说:

  

创建一个lodash包装器实例,该实例在启用显式方法链序列的情况下包装值。这些序列的结果必须用_#value打开。

因此,这就是使其发挥作用所需的一切:

carMakes = _.chain(inventory)
            .map('make')
            .uniq()
            .value()

之前我曾尝试过这个,但是VS Code并没有删除错误,直到我徘徊在value()之上,然后错误就消失了。由于我之前没有这样做,我认为它没有用。