@Danoneko

Как быстро сравнить 2 числовых массива?

Можно ли как-то быстро сравнить числовые массивы:
arr1 = [1,2,3];
arr2 = [1,2,3];
arr3 = [3,2,1];

Конструкция типа:
if(arr1 == arr2 || arr1 == arr3){
 alert('correct');
}
else{alert('not right');}


Почему-то не срабатывает. Что не так?
  • Вопрос задан
  • 197 просмотров
Решения вопроса 3
mmmaaak
@mmmaaak
оператор == не сравнивает массивы поэлементно, он сравнивает ссылки, а они очевидно разные. Смый банальный способ сравнить такие небольшие массивы, это привести их к строке с помощью JSON.stringify() и сравнить строки
Ответ написан
Комментировать
2chevskii
@2chevskii
Если бы каждый мог в поиск, тостер бы вымер.
Порой, глядя на предыдущие ответы, я просто не понимаю - что творится в головах этих людей? Неужели все JS разработчики настолько забивают на производительность своих поделок?
function runTests() {
    const testCount = 1000;

    const testArrays = [];

    for (let i = 0; i < testCount; i++) {
        const arrayLength = Math.round(Math.random() * 100);
        const array = [];
        for (let i = 0; i < arrayLength; i++) {
            array.push(Math.random() * 10);
        }
        testArrays.push(array);
    }

    console.time('stringifyCompare');

    for (let i = 0; i < testCount - 1; i++) {
        compareStringify(testArrays[i], testArrays[i + 1]);
    }

    console.timeEnd('stringifyCompare');

    console.time('normalCompare');

    for (let i = 0; i < testCount - 1; i++) {
        compareTheRightWay(testArrays[i], testArrays[i + 1]);
    }

    console.timeEnd('normalCompare');
}

function compareStringify(first, second) {
    return JSON.stringify(first) == JSON.stringify(second);
}

function compareTheRightWay(first, second) {
    if (first.length != second.length) {
        return false;
    }

    for (let i = 0; i < first.length; i++) {
        if (first[i] != second[i]) {
            return false;
        }
    }

    return true;
}

runTests();

Результаты:
stringifyCompare: 21.304ms
normalCompare: 0.148ms
Ответ написан
Когда массивы равны в js?
Или как сказали в ответах можно привести к строке и потом сравнивать.
const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];
const arr3 = [3, 2, 1];

if (JSON.stringify(arr1) == JSON.stringify(arr2) || JSON.stringify(arr1) == JSON.stringify(arr3)) {
  alert('correct');
} else {
  alert('not right');
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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