使用新 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 删除数组中的重复项会出错的主要内容,如果未能解决你的问题,请参考以下文章