在Javascript中使用Map从一组字谜中查找唯一的单词
我知道在没有地图的情况下怎么做。对于这个任务,使用在Javascript中使用Map从一组字谜中查找唯一的单词,javascript,arrays,object,anagram,Javascript,Arrays,Object,Anagram,我知道在没有地图的情况下怎么做。对于这个任务,使用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 (u
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));
函数aclean(arr){
让结果=[];
让unique=newmap();
for(设i=0;i
结果应该是:nap,teachers,ear
或PAN,cheaters,era
您可以使用规范化(小写,排序)字符串进行排序,并返回筛选结果
函数aclean(数组){
让unique=newset();
返回数组。筛选器(s=>{
让sorted=s.toLowerCase().split(“”).sort().join(“”);
如果(!unique.has(已排序)){
唯一。添加(已排序);
返回true;
}
});
}
let数组=[“午睡”、“老师”、“骗子”、“潘”、“耳朵”、“时代”、“公顷”];
console.log(aclean(array))代码>您可以对规范化(小写,排序)字符串进行排序,并返回筛选结果
函数aclean(数组){
让unique=newset();
返回数组。筛选器(s=>{
让sorted=s.toLowerCase().split(“”).sort().join(“”);
如果(!unique.has(已排序)){
唯一。添加(已排序);
返回true;
}
});
}
let数组=[“午睡”、“老师”、“骗子”、“潘”、“耳朵”、“时代”、“公顷”];
console.log(aclean(array))代码>我认为Set
对于这种情况来说是完美的。您可以通过以下步骤来完成
- 首先创建一个助手函数,该函数对字符串进行排序
- 然后使用
Set
和map()
- 然后
map()
将该数组再次映射到原始数组中的值,该值是已排序字符串的字谜
const sort=str=>str.toLowerCase().split(“”).sort().join(“”)
const aclean=arr=>[…新集合(arr.map(sort))].map(x=>arr.find(a=>sort(a)==x))
let数组=[“午睡”、“老师”、“骗子”、“潘”、“耳朵”、“时代”、“公顷”];
console.log(aclean(array))代码>我认为Set
对于这种情况来说是完美的。您可以通过以下步骤来完成
- 首先创建一个助手函数,该函数对字符串进行排序
- 然后使用
Set
和map()
- 然后
map()
将该数组再次映射到原始数组中的值,该值是已排序字符串的字谜
const sort=str=>str.toLowerCase().split(“”).sort().join(“”)
const aclean=arr=>[…新集合(arr.map(sort))].map(x=>arr.find(a=>sort(a)==x))
let数组=[“午睡”、“老师”、“骗子”、“潘”、“耳朵”、“时代”、“公顷”];
console.log(aclean(array))
您可以使用.forEach()
在数组上循环,并在每次迭代时检查映射
是否有已排序单词的关键字,如果没有,则将已排序单词设置为关键字,并将与该单词关联的单词设置为值。然后,您可以返回地图的.values()
数组以获得结果:
函数aclean(arr){
让unique=newmap();
arr.forEach(word=>{
让sorted=word.toLowerCase().split(“”).sort().join(“”);
如果(!unique.has(已排序)){
唯一。集合(已排序,word);
}
});
返回[…unique.values()];
}
let数组=[“午睡”、“老师”、“骗子”、“潘”、“耳朵”、“时代”、“公顷”];
console.log(aclean(array))
您可以使用.forEach()
在数组上循环,并在每次迭代时检查映射
是否有已排序单词的关键字,如果没有,则将已排序单词设置为关键字,并将与该单词关联的单词设置为值。然后,您可以返回地图的.values()
数组以获得结果:
函数aclean(arr){
让unique=newmap();
arr.forEach(word=>{
让sorted=word.toLowerCase().split(“”).sort().join(“”);
如果(!unique.has(已排序)){
唯一。集合(已排序,word);
}
});
返回[…unique.values()];
}
let数组=[“午睡”、“老师”、“骗子”、“潘”、“耳朵”、“时代”、“公顷”];
console.log(aclean(array))代码>在这种情况下,我需要一个完全符合Map的解决方案,但你的答案也太棒了!Vielen Dank!在这种情况下,我需要一个解决方案完全与地图,但你的答案是如此伟大的太!Vielen Dank!我需要一个完全符合地图的解决方案。但是你的解决方案是有效的,你解释得很好。它至少值得一次投票。非常感谢。我需要一个完全符合地图的解决方案。但是你的解决方案是有效的,你解释得很好。它至少值得一次投票。非常感谢。如果您不关心顺序,那么只需Map(a.Map(w=>[sorted,w]))
如果您不关心顺序,那么只需Map(a.Map(w=>[sorted,w])