Javascript: эффективно сравнить два целочисленных массива

У меня есть два целочисленных массива, которые содержат числовые значения. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти те элементы, которые появляются в обоих списках, в то время как в отдельной функции я хочу пройти по массивам и найти элементы, которые находятся в первом, а не во втором.

Очевидный способ сделать это - вложенные циклы for:

var containedInFirst = false;
for (var primaryID = 0; primaryID < PrimaryArray.length; primaryID++) {
        containedInFirst = false;
        for (var secondaryID = 0; secondaryID < SecondaryArray.length; secondaryID++) {
            if (PrimaryArray [primaryID] === SecondaryArray[secondaryID]) {
                containedInFirst = true;
                break;
            }
        }

//Do some more stuff based on the value of containedInFirst here
}

Но, учитывая, что списки могут содержать сотни или тысячи записей, это довольно много итераций и интенсивного использования процессора. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти ...

У меня есть два целочисленных массива, которые содержат числовые значения. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти те элементы, которые появляются в обоих списках, в то время как в отдельной функции я хочу пройти по массивам и найти элементы, которые находятся в первом, а не во втором.

Очевидный способ сделать это - вложенные циклы for:

var containedInFirst = false;
for (var primaryID = 0; primaryID < PrimaryArray.length; primaryID++) {
        containedInFirst = false;
        for (var secondaryID = 0; secondaryID < SecondaryArray.length; secondaryID++) {
            if (PrimaryArray [primaryID] === SecondaryArray[secondaryID]) {
                containedInFirst = true;
                break;
            }
        }

//Do some more stuff based on the value of containedInFirst here
}

Но, учитывая, что списки могут содержать сотни или тысячи записей, это довольно много итераций и интенсивного использования процессора. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти ...

У меня есть два целочисленных массива, которые содержат числовые значения. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти те элементы, которые появляются в обоих списках, в то время как в отдельной функции я хочу пройти по массивам и найти элементы, которые находятся в первом, а не во втором.

Очевидный способ сделать это - вложенные циклы for:

var containedInFirst = false;
for (var primaryID = 0; primaryID < PrimaryArray.length; primaryID++) {
        containedInFirst = false;
        for (var secondaryID = 0; secondaryID < SecondaryArray.length; secondaryID++) {
            if (PrimaryArray [primaryID] === SecondaryArray[secondaryID]) {
                containedInFirst = true;
                break;
            }
        }

//Do some more stuff based on the value of containedInFirst here
}

Но, учитывая, что списки могут содержать сотни или тысячи записей, это довольно много итераций и интенсивного использования процессора.

У меня есть два целочисленных массива, которые содержат числовые значения. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти те элементы, которые появляются в обоих списках, в то время как в отдельной функции я хочу пройти по массивам и найти элементы, которые находятся в первом, а не во втором.

Очевидный способ сделать это - вложенные циклы for:

var containedInFirst = false;
for (var primaryID = 0; primaryID < PrimaryArray.length; primaryID++) {
        containedInFirst = false;
        for (var secondaryID = 0; secondaryID < SecondaryArray.length; secondaryID++) {
            if (PrimaryArray [primaryID] === SecondaryArray[secondaryID]) {
                containedInFirst = true;
                break;
            }
        }

//Do some more stuff based on the value of containedInFirst here
}

Но, учитывая, что списки могут содержать сотни или тысячи записей, это довольно много итераций и интенсивного использования процессора.

У меня есть два целочисленных массива, которые содержат числовые значения. Я хочу просмотреть оба списка и проверить их на общность (или отсутствие). Т.е. я хочу перебрать массив (ы) и найти те элементы, которые появляются в обоих списках, в то время как в отдельной функции я хочу пройти по массивам и найти элементы, которые находятся в первом, а не во втором.

Очевидный способ сделать это - вложенные циклы for:

var containedInFirst = false;
for (var primaryID = 0; primaryID < PrimaryArray.length; primaryID++) {
        containedInFirst = false;
        for (var secondaryID = 0; secondaryID < SecondaryArray.length; secondaryID++) {
            if (PrimaryArray [primaryID] === SecondaryArray[secondaryID]) {
                containedInFirst = true;
                break;
            }
        }

//Do some more stuff based on the value of containedInFirst here
}

Но, учитывая, что списки могут содержать сотни или тысячи записей, это довольно много итераций и интенсивного использования процессора. Поэтому мне было интересно, есть ли более эффективный способ выполнения приведенного выше кода? Не только фактический поиск, но и нечто более эффективное, чем массив Integer в качестве контейнера для значений, или просто отказ от использования вложенных циклов for для обхода и сравнения содержимого.

Есть ли мысли о более эффективных или элегантных решениях?

15
задан LDJ 16 November 2010 в 11:45
поделиться