JavaScript - эффективное сравнение двух массивов - PullRequest
0 голосов
/ 30 октября 2018

Я ищу эффективные по времени способы сравнения элементов между массивами. У меня есть два упрощенных коротких примера данных, которые могут содержать мои массивы:

let a = ["mushrooms", "bread", "tomato", "sauce"]
let b = ["o", "e", "a"]

Длина массивов, с которыми я работаю, превышает 500 000 элементов. В моих массивах я сравнивал бы каждый элемент массива b с каждым элементом массива a и вычислял результат в зависимости от этого. (т. е. проверка количества O s слов из массива a и сохранение результата) Однако в настоящее время я использую два цикла - один итерируемый a и вложенный внутри него, повторяющий b.

Моя цель - повысить эффективность, так как я считаю, что мой алгоритм далеко не эффективен по времени. Я хотел бы узнать о распространенных практиках, которые лучше справляются с этим.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Я не уверен, какой уровень вы хотите сравнить, а также насколько хорошо он будет работать для 500 000 элементов, но если вы ищете простое сравнение А / Б, вы можете преобразовать свои массивы в строки и сравнить строки .

function compareArrays(arr1, arr2) {
  const compare1 = JSON.stringify(arr1.sort());
  const compare2 = JSON.stringify(arr2.sort());
  return compare1 === compare2;
}
0 голосов
/ 30 октября 2018

Еще один способ сделать это - заменить ключевые слова на пустые и сравнить длину

.
let a = ["mushrooms", "bread", "tomato", "sauce"];
let b = ["o", "e", "a"];
let c = [];

for(var i=0; i< b.length; i++)
{
    c.push(new RegExp(b[i],'g'));
}

for(var i=0; i < a.length; i++)
{
    for(var j=0; j < b.length; j++)
    {
        console.log(a[i], b[j], a[i].length - a[i].replace(c[j],'').length);
    }
}

РЕДАКТИРОВАТЬ: мы провели тест эффективности цикла и для цикла является наиболее эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...