例如,我试图忽略所有其他字谜而在数组中找到第一个唯一字符串:
let words = ['nap','teachers','cheaters','pan','ear','era','hectares]]
输出=小睡老师的耳朵
或 让单词= ['rat','tar','art'];
输出老鼠
我被困在这里
let set = new Set();
let words = let words = ['nap', 'teachers', 'cheaters', 'pan', 'ear', 'era', 'hectares']
let map = new Map();
for (let word of words) {
let sorted = word.toLowerCase().split('').sort().join('');
map.set(sorted, word);
set.add(sorted)
}
let arr = Array.from(set)
for (let inx = 0; inx < words.length; inx++) {
arr.push('0')
}
console.log(arr);
console.log(words);
function isAnagram(s1, s2){
return s1.split("").sort().join("") === s2.split("").sort().join("");
}
let result = [];
for (let i = 0; i < words.length; i++) {
if ()
result.push(words[i])
}
console.log(result);
答案 0 :(得分:1)
您可以创建存储所有选项的Map
映射,而不是仅存储最后一个字谜选项的string: string
中的string: [ string ]
。
然后,最后,您可以遍历所有这些条目并返回每个数组的第一个元素:
let set = new Set();
let words = ['nap', 'teachers', 'cheaters', 'pan', 'ear', 'era', 'hectares']
let map = new Map();
for (let word of words) {
let sorted = word.toLowerCase().split('').sort().join('');
if (!map.has(sorted)) map.set(sorted, []);
set.add(sorted);
map.get(sorted).push(word);
}
let arr = Array
.from(set)
.map(k => map.get(k)[0])
console.log(arr);
答案 1 :(得分:0)
您需要检查数组“ words”的当前位置,然后检查其他位置,这意味着您需要在一个循环中有一个循环,因此您的代码应如下所示:
let set = new Set();
let words = ['nap', 'teachers', 'cheaters', 'pan', 'ear', 'era', 'hectares']
let map = new Map();
for (let word of words) {
let sorted = word.toLowerCase().split('').sort().join('');
map.set(sorted, word);
set.add(sorted)
}
let arr = Array.from(set)
for (let inx = 0; inx < words.length; inx++) {
arr.push('0')
}
console.log(arr);
console.log(words);
function isAnagram(s1, s2){
console.log("checking: " + s1 + " and " + s2);
return s1.split("").sort().join("") === s2.split("").sort().join("");
}
let result = [];
let anagram = false;
for (let i = 0; i < words.length; i++) {
for(let j=i+1; j<words.length; j++){
if (isAnagram(words[i], words[j])){
anagram = true;
break;
console.log("Is anagram!");
}
}
if(anagram)
{
//Before insert we will see if we have an anagram in the result array
anagram = false;
for(let z=0; z<result.length; z++)
{
//We will se if it exists in result
if(isAnagram(words[i],result[z]))
{
anagram = true;
break;
}
}
if(!anagram)
{
result.push(words[i]);
anagram = false;
}
}
}
console.log(result);
答案 2 :(得分:0)
感谢user3297291 我找到了更简单的变体
let words = ['nap', 'teachers', 'cheaters', 'pan', 'ear', 'era', 'hectares']
const set = new Set();
const unique = [];
words.forEach((word) => {
const sorted = word.split('').sort().join('');
if (set.has(sorted)) {
return;
}
unique.push(word);
set.add(sorted);
});
print(unique.join(' '));
答案 3 :(得分:0)
另一个实现。 :)
function aClean(arr) {
var map = new Map();
arr.map(item => {
var key = item.toLowerCase().split("").sort().join("");
map.has(key) ? null : map.set(key, item)
});
return Array.from(map.values());
}
答案 4 :(得分:-1)
这应该可以完成工作:
let words = ['nap', 'teachers', 'cheaters', 'pan', 'ear', 'era', 'hectares']
let map = new Map(
words.reverse().map(word => {
let sorted = word.toLowerCase().split('').sort().join('');
return [sorted, word];
})
);
console.log(Array.from(map.values())); // output: [ "teachers", "ear", "nap" ]
使用每个单词中的字符作为键。例如:对于[老师,作弊者,公顷],关键是“ aceehrst”
由于顺序对于查找第一个单词很重要,因此反转单词顺序将有助于保持“老师”作为键“ aceehrst”而不是“公顷”的值。
答案 5 :(得分:-1)
const checkAnagram = (var1, var2) => {
let val1 = var1.split("").sort().join("")
let val2 = var2.split("").sort().join("")
if (val1 == val2) {
return true;
} else {
return false;
}
return false;
}
console.log(checkAnagram("shoes", "ssoeh"))