在 Javascript 中使用 Map 从一组字谜中查找唯一单词
Posted
技术标签:
【中文标题】在 Javascript 中使用 Map 从一组字谜中查找唯一单词【英文标题】:Find unique words from an array of anagrams using Map in Javascript 【发布时间】:2020-01-16 10:20:56 【问题描述】:我知道没有Map
怎么办。将Map
用于此任务似乎更合乎逻辑,但我似乎无法实现它。这甚至可能吗?
到目前为止,我把这个绑起来了:
function aclean(arr)
let result = [];
let unique = new Map();
for(let i = 0; i < arr.length; i++)
let sorted = arr[i].toLowerCase().split("").sort().join("");
/*if (unique.add(sorted))
result.push(arr[i]);
*/
return result;
let array = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
console.log(aclean(array));
结果应该是:nap,teachers,ear
或 PAN,cheaters,era
【问题讨论】:
【参考方案1】:您可以使用.forEach()
循环遍历您的数组,并在每次迭代时检查您的Map
是否有已排序单词的键,如果没有,则将已排序单词设置为键,并将与该单词关联的单词作为值。然后,您可以返回地图的 .values()
数组以获取结果:
function aclean(arr)
let unique = new Map();
arr.forEach(word =>
let sorted = word.toLowerCase().split("").sort().join("");
if(!unique.has(sorted))
unique.set(sorted, word);
);
return [...unique.values()];
let array = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
console.log(aclean(array));
【讨论】:
如果您不关心订单,那么只需Map(a.map(w => [sorted, w]))
【参考方案2】:
您可以将Set
与规范化(小写,已排序)字符串一起使用并返回过滤结果。
function aclean(array)
let unique = new Set();
return array.filter(s =>
let sorted = s.toLowerCase().split("").sort().join("");
if (!unique.has(sorted))
unique.add(sorted);
return true;
);
let array = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
console.log(aclean(array));
【讨论】:
在这种情况下,我需要一个完全使用 Map 的解决方案,但是您的回答也很棒! Vielen Dank!【参考方案3】:我认为Set
非常适合这种情况。您可以按照以下步骤进行操作。
Set
和map()
创建一个唯一的排序字符串数组
然后map()
将该数组再次转换为原始数组中的值,该值是已排序字符串的变位词。
const sort = str => str.toLowerCase().split('').sort().join('')
const aclean = arr => [... new Set(arr.map(sort))].map(x => arr.find(a => sort(a) === x))
let array = ["nap", "teachers", "cheaters", "PAN", "ear", "era", "hectares"];
console.log(aclean(array));
【讨论】:
我需要一个完全符合 Map 的解决方案。但是您的解决方案有效,并且您很好地解释了它。它至少值得一票。谢谢!以上是关于在 Javascript 中使用 Map 从一组字谜中查找唯一单词的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户是不是使用 jQuery/Javascript 从一组复选框中选中了至少一个复选框?
javascript 从一组数据中找到指定的单条数据的方法 by FungLeo