根据字符、空格无关紧要从句子数组中删除重复句子的最佳方法
Best way to remove duplicate sentences from an array of sentences based on their characters, whitespaces inconsequential
假设我们有这样一个数组
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
我要return['bic ycle drive', 'bici ycl frei', 'manace']
因为bic ycle drive, bicyc le dri ve, bicycle drive, bicycle drive
是同一句白space不同地方
总结:只是return唯一值,白色space不重要。
Ps:我们可以选择任何重复项。
谢谢。
从 ES6 开始,使用 Set 创建唯一值数组很容易,但在这种情况下,您需要转换字符串(删除 spaces)以找到重复项,但仍保留原始字符串,所以你可以 return 他们。为此,您可以创建一个以“不带 space 的字符串”为键,以原始字符串为值的 Map。由于 Map 的键是唯一的。
使用Array.map()
创建一个Map,生成[string without spaces, string]
的数组。然后将 Map.values()
迭代器转换回数组。这将 return 每个重复系列中的最后一项。
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
const result = [...new Map(
array.map(str => [str.replace(/\s+/g, ''), str])
).values()]
console.log(result)
如果您想要一系列重复项中的第一项,您可以使用 Array.reduce()
创建映射,并且仅在键不存在时分配键:
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
const result = [...array.reduce((acc, str) => {
const key = str.replace(/\s+/g, '')
return acc.has(key) ? acc : acc.set(key, str)
}, new Map()).values()]
console.log(result)
假设我们有这样一个数组
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
我要return['bic ycle drive', 'bici ycl frei', 'manace']
因为bic ycle drive, bicyc le dri ve, bicycle drive, bicycle drive
是同一句白space不同地方
总结:只是return唯一值,白色space不重要。
Ps:我们可以选择任何重复项。
谢谢。
从 ES6 开始,使用 Set 创建唯一值数组很容易,但在这种情况下,您需要转换字符串(删除 spaces)以找到重复项,但仍保留原始字符串,所以你可以 return 他们。为此,您可以创建一个以“不带 space 的字符串”为键,以原始字符串为值的 Map。由于 Map 的键是唯一的。
使用Array.map()
创建一个Map,生成[string without spaces, string]
的数组。然后将 Map.values()
迭代器转换回数组。这将 return 每个重复系列中的最后一项。
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
const result = [...new Map(
array.map(str => [str.replace(/\s+/g, ''), str])
).values()]
console.log(result)
如果您想要一系列重复项中的第一项,您可以使用 Array.reduce()
创建映射,并且仅在键不存在时分配键:
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
const result = [...array.reduce((acc, str) => {
const key = str.replace(/\s+/g, '')
return acc.has(key) ? acc : acc.set(key, str)
}, new Map()).values()]
console.log(result)