iNeextt
@iNeextt
Junior Front end Developer

Как проверить элементы массива на совпадающие значения?

Допустим, у нас есть массив users:

const users = [
    // Имя:Фамилия:Возраст
    'dmitryi:visokih:21',
    'ekaterina:veselova:19',
    'visokih:dmitriy:21',
]


Как мы видим, у нас есть 2 повторяющихся элемента, у которых индексы 0 и 2. Просто значения написаны в разном порядке.

Мне нужно написать функцию, которая будет находить такие совпадения.

Я уже написал такую функцию, но она находит совпадения только в том случае, если одинаковые элементы написаны в одинаковом порядке, вот она:

const unique = arr => {
    let result = [];

    for (let str of arr) {
        if (!result.includes(str)) {
            result.push(str);
        }
    }

    return result;
}


Подскажите пожалуйста, как я могу написать функцию, которая будет находить совпадения, даже если одинаковые элементы написаны в разном порядке?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
перед сравнением приводите их к однозначному порядку элементов. Скажем, сортируйте алфавитно, и тогда "dmitryi" всегда окажется до "visokih".

spoiler
const unique = arr => {
    const result = [];
    const hashes = new Set();

    for (let str of arr) {
        const hash = str.split(':').sort().join(':');
        if (hashes.has(hash)) continue;
        hashes.add(hash);
        result.push(str);
    }

    return result;
}
P.S. у вас опечатка в имени Дмитрия — два разных варианта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы