Сравнение двух массивов с объектами
Вопрос, массивы отсортированы, и id у них числовые? Можно ли строить алгоритм на том, что id — это 1,2,3 и т.д. Или же они могуть быть разнообразные? В зависимости от ответа, могут быть разные алгоритмы по производительности
13 окт 2021 в 8:14
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Тяжело представить вычисление пересечения массива без переобходов. Единственное, что могу предложить — сократить количество операций.
Для начала, стоит определить самый маленький массив, так как результирующий массив не будет больше самого маленького, но позволит сократить количество обходов для ряда значений, которые есть в большем, но отсутствуют в меньшем массиве. Это позволит убрать push и использовать filter.
Вторым этапом, нам нет нужды во втором массива обходить его весь, как у вас. Достаточно первого совпадения, в этом нам поможет some. Таким образом мы гарантированно обойдем оба массива только когда нет ни одного соответствия. В случае с совпадением, мы выйдем при первом же совпадении.
const arr1 = [ < id: 1 >, < id: 2 >, < id: 3 >, < id: 4 >] const arr2 = [ < id: 1 >, < id: 4 >, < id: 5 >, ] const leastArr = arr1.length < arr2.length ? arr1 : arr2; const biggestArr = arr1.length >= arr2.length ? arr1 : arr2; const resultArray = leastArr.filter((item) => < return biggestArr.some((item2) =>item2.id === item.id) >); console.log(resultArray);
Сравните массивы в JavaScript
В этом посте мы обсудим, как сравнивать массивы в JavaScript. Два массива называются равными, если они содержат одни и те же элементы в одном и том же порядке. Решение должно работать для вложенных массивов любой глубины.
Например, массив [1, 2, [3, [4, 5]]] равен массиву [1, 2, [3, [4, 5]]] пока он отличается от массива [1, 2, [3, 4, 5]] .
1. Использование библиотеки Underscore/Lodash
Если вы уже используете библиотеку Underscore или Lodash, рассмотрите возможность использования _.isEqual метод для проверки равенства массивов. Он выполняет глубокое сравнение между указанными значениями, а также работает для вложенных массивов.
как сравнить два массива в javascript
Прямое сравнение массивов всегда будет давать результат false . Поскольку массив, как объект, указывает на ссылку памяти, где хранится «значение». И эти ссылки всегда будут разными, за исключением случая когда мы сравниваем один и тот же объект (массив).
[1, 2, 3] === [1, 2, 3]; // false [1, 2, 3] > [1, 2, 3]; // false [1, 2, 3] [1, 2, 3]; // false
const a = [10, 11]; const b = a; console.log(a === b); // true
В последнем случае мы сравниваем один и тот же массив и получаем true , т.к. в b скопировалась ссылку на этот массив, а не значение.
26 сентября 2022
Для того чтобы сравнить два массива и получить результат — например список уникальных значений, можно воспользоваться вложенными циклами:
const arr1 = [1,2,3,6,5]; const arr2 = [1,6,7,8]; const result = []; for (let i = 0; i arr1.length; i++) for (let j = 0; j arr2.length; j++) if (arr1[i] === arr2[j]) result.push(arr1[i]) > > >
Сравнение массивов в JavaScript
Часто разработчики сталкиваются с необходимостью сравнить два массива в JavaScript. Например, можно иметь два массива чисел и нужно узнать, содержат ли они одинаковые числа в одинаковом порядке. Интуитивно кажется, что для этого достаточно использовать оператор сравнения == или === . Однако, если попробовать сделать это, то результат может быть неожиданным.
var array1 = [1, 2, 3]; var array2 = [1, 2, 3]; console.log(array1 == array2); // Выводит false console.log(array1 === array2); // Выводит false
Причина этого в том, что операторы == и === сравнивают ссылки на объекты, а не их содержимое. В данном случае array1 и array2 — это разные объекты, хотя их содержимое одинаково.
Один из способов сравнить содержимое массивов — преобразовать их в строки с помощью метода JSON.stringify и сравнить полученные строки.
var array1 = [1, 2, 3]; var array2 = [1, 2, 3]; console.log(JSON.stringify(array1) == JSON.stringify(array2)); // Выводит true
Этот способ работает, но он может быть неэффективным для больших массивов, поскольку JSON.stringify преобразует весь массив в строку.
Более эффективным способом может быть использование цикла для проверки каждого элемента массива. Такой подход требует больше кода, но он работает быстрее для больших массивов и обеспечивает большую гибкость, так как можно управлять тем, как происходит сравнение элементов.
function arraysAreEqual(a, b) < if (a.length != b.length) return false; for (var i = 0; i < a.length; i++) < if (a[i] != b[i]) return false; >return true; > var array1 = [1, 2, 3]; var array2 = [1, 2, 3]; console.log(arraysAreEqual(array1, array2)); // Выводит true
В этом коде функция arraysAreEqual сначала проверяет, равны ли длины массивов. Если они не равны, то массивы точно не одинаковы, и функция возвращает false . Затем функция проходит по каждому элементу массива и сравнивает его с соответствующим элементом другого массива. Если она находит пару несовпадающих элементов, то она возвращает false . Если функция проходит через все элементы и не находит несовпадений, то она возвращает true , указывая на то, что массивы одинаковы.
