实际上,有一种非常简单且高效的方法可以利用内置的
Set
行为从数组中删除重复元素。
function removeDups<T>(array: T[]): T[] {
return [...new Set(array)];
}
const names = ['John', 'Paul', 'George', 'Ringo', 'John'];
console.log(removeDups(names));
TypeScript Playground
该函数将您的数组转换为Set
,比通过数组进行本地循环更快地去除重复项,然后使用展开语法将该Set
转换回一个新数组。
通过使removeDups
函数使用通用类型,它可以与任何类型的数组一起使用,而不仅仅是像您的示例中的字符串数组。
将您编写的函数转换为TypeScript,您可以使用以下代码:
const names = ['John', 'Paul', 'George', 'Ringo', 'John'];
function removeDups(names: string[]): string[] {
let unique: Record<string, boolean> = {};
names.forEach(function(i) {
if(!unique[i]) {
unique[i] = true;
}
});
return Object.keys(unique);
}
removeDups(names)
TypeScript Playground
这个使用
实用类型Record
来处理你的
unique
对象类型。然而,由于
Object.keys
的工作方式,这个函数只能处理字符串数组。如果你想要在所有类型的数组上使用这种方法,可以考虑使用
Map
,这样你就可以按其他类型进行索引。
大致如下所示:
const names = ['John', 'Paul', 'George', 'Ringo', 'John'];
function removeDups<T>(names: T[]): T[] {
let unique: Map<T, boolean> = new Map();
names.forEach(function(i) {
if(!unique.has(i)) {
unique.set(i, true);
}
});
return Array.from(unique.keys());
}
console.log(removeDups(names));
TypeScript Playground
strict
зј–иҜ‘ж Үеҝ—ж—¶пјҢ@frozenдёҚдјҡеҸ‘з”ҹдҪңз”ЁгҖӮиҝҷжҳҜдҪҝз”Ёtsc --init
е‘Ҫд»Өж—¶зҡ„й»ҳи®Өи®ҫзҪ®... - Patrick Roberts