Как сравнить два строковых массива, без учета регистра и независимо от порядка - JS, ES6 - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу сравнить два строковых массива, но без учета регистра и независимо.

Например:

['a', 'b', 'c'] === ['A', 'c', 'B'] -> TRUE

['a', 'b', 'c'] === ['a', 'b', 'd'] -> FALSE

TRUE, если они имеют одинаковую длину и одинаковые значения (без учета регистра ['A'] === ['a'] -> true) и независимо от порядка ['a', 'b'] === ['b', 'a'] -> true.

На данный момент я сделал следующее:

areEqual = (arr1, arr2) => {
    const equalLength = arr1.length === arr2.length;

    return arr2.every(arr2Item => {

        return arr1.includes(arr2Item.toLowerCase());

    }) && equalLength;
};

, но это case sensitive.

Я использую JS, ES6 с React.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вам необходимо заменить arr1 его строчной копией.Вы также должны немедленно вернуться, если они не имеют одинаковую длину, вместо того, чтобы выполнять всю работу по сравнению, когда в этом нет необходимости.

areEqualCI = (arr1, arr2) => {
    if (arr1.length != arr2.length) {
        return false;
    }
    const arr1Lower = arr1.map(e => e.toLowerCase());
    return arr2.every(arr2Item => {
        return arr1Lower.includes(arr2Item.toLowerCase());
    });
};

Возможно, будет также лучше отсортировать два массива, а затем просто сравнитьони поэлементно:

areEqualCI = (arr1, arr2) => {
    if (arr1.length != arr2.length) {
        return false;
    }
    const arr1Lower = arr1.map(e => e.toLowerCase()).sort();
    const arr2Lower = arr2.map(e => e.toLowerCase()).sort();
    for (let i = 0; i < arr1.length; i++) {
        if (arr1[i] != arr2[i]) {
            return false;
        }
    }
    return true;
}
0 голосов
/ 20 декабря 2018

Вы можете нормализовать строки в нижний регистр и использовать Set для проверки значений.

function compare(a, b) {
    const lower = s => s.toLowerCase();
    return b
        .map(lower)
        .every(Set.prototype.has, new Set(a.map(lower)));
}

console.log(compare(['a', 'b', 'c'], ['A', 'c', 'B'])); //  true
console.log(compare(['a', 'b', 'c'], ['a', 'b', 'd'])); // false
console.log(compare(['a', 'b', 'c'], ['a', 'c']));      //  true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...