Answer
t.me/js_testОтвет:
finder --> f: 1 friend --> f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1
Объяснение:
Слова являются анаграммами другого слова, если имеют одинаковые буквы в одинаковом количестве, но в разном порядке.
Первое, на что нужно обратить внимание, — вам нужно проверять каждую букву в двух входных строках не только на наличие, но и на количество в каждой строке.Обратите внимание на использование Object.keys(). Этот метод возвращает массив, содержащий имена или ключи в том же порядке, в котором они встречаются в объекте.Это удобный способ получить свойства объекта без выполнения громоздкого цикла. В этой задаче вы можете использовать этот способ вместе со свойством .length, чтобы проверить, имеют ли обе строки одинаковое количество символов, что является важной особенностью анаграмм.
данном примере сначала создается вспомогательная функция для создания объекта, который будет хранить данные. Далее, с помощью регулярных выражений мы исключаем всё, что не является символом. Если значение при проходе цикла for of содержится в объекте, то увеличиваем значение на 1, в противном случае добавляем букву в качестве ключа и 1 в качестве значения.
Затем в функции anagram создаём два объекта - strA и strB и сравниваем количество ключей в обоих объектах. Если оба объекта имеют одинаковое количество ключей, мы можем быть уверены, что обе строки имеют одинаковое количество символов. Теперь мы можем сравнить оба объекта, чтобы увидеть, имеют ли они одинаковые буквы в одинаковом количестве.
Если проверка успешна, строки являются анаграммами — возвращаем true
Код для проверки:
const buildCharObject = str => {
const charObj = {}
for(let char of str.replace(/[^\w]/g).toLowerCase()) {
charObj[char] = charObj[char] + 1 || 1
}
return charObj
}
const anagram = (strA, strB) => {
const aCharObject = buildCharObject(strA)
const bCharObject = buildCharObject(strB)
if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) {
return false
}
if(strA === strB) {
return false
}
for(let char in aCharObject) {
if(aCharObject[char] !== bCharObject[char]) {
return false
}
}
return true
}