使用新 Set 删除数组中的重复项会出错

Posted

技术标签:

【中文标题】使用新 Set 删除数组中的重复项会出错【英文标题】:removing duplicates in an array with new Set gives an error 【发布时间】: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)) - 它也更具可读性:-) 是的,你是对的。 【参考方案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)。

【讨论】:

以上是关于使用新 Set 删除数组中的重复项会出错的主要内容,如果未能解决你的问题,请参考以下文章

在我的情况下使用 Set 删除数组中的重复元素

leetcode-26.删除重复数组中的重复项

删除排序数组中的重复项

26. 删除排序数组中的重复项

删除排序数组中的重复项并将它们推送到新数组中

删除排序数组中的重复数组——移除元素