【问题标题】:removing duplicates in an array with new Set gives an error使用新 Set 删除数组中的重复项会出错
【发布时间】:2019-04-07 13:12:54
【问题描述】:

我正在尝试使用 new Set 删除数组中的重复项,但出现错误“new Set(names).slice is not a function”

const names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
const uniq = [ ...new Set(names) ];
console.log(uniq);

这是 stackblitz 上的 code

【问题讨论】:

  • 使用Array.from(new Set(names)) - 它也更具可读性:-)
  • 是的,你是对的。

标签: javascript typescript spread-syntax


【解决方案1】:

当您的代码经过构建阶段并从 TypeScript 转换为 JavaScript 时,您发布的第二行变为:

var uniq = new Set(names).slice();

我个人认为这是一个 TypeScript 错误,但我从不使用 TypeScript,所以我不能肯定。

edit — 实际上我认为除非您以 ES5 为目标,否则不会发生这种情况。

【讨论】:

  • 看起来像一个“优化”,其中传播语法仅支持数组,而不支持任意迭代。
  • @Bergi 对,如果 TypeScript 以 ES6 为目标,它的工作方式可能会有所不同;我对此了解不多,并且在链接的 Angular 设置中看不到任何关于如何影响 TypeScript 构建步骤的明显内容。
  • 存在(至少)一个关于此行为的未解决问题:github.com/Microsoft/TypeScript/issues/8856
  • @Pointy 你的回答很有帮助。
【解决方案2】:

我能够通过在项目的根目录中添加tsconfig.json 来修复错误。这是一个超级简单的配置:

{
  "compilerOptions": {
    "target": "es6"
  }
}

发生的情况是 TypeScript 正在编译为 es3 版本的 javascript,如果没有将目标配置为 shown here,则这是默认版本(请参阅 --target)。

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 2013-06-17
    • 2019-11-22
    • 2016-08-13
    • 1970-01-01
    • 2015-12-29
    • 2012-12-06
    • 2012-03-25
    • 2019-07-11
    相关资源
    最近更新 更多