在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])