Как сравнить два массива js
Перейти к содержимому

Как сравнить два массива js

  • автор:

Как сравнить элементы массива между собой javascript

Если мы хотим сравнить определенные элементы массива друг с другом, достаточно взять значения этих элементов и провести сравнение.

Вот простой пример такого сравнения:

const arr = [1,2,3,4,1,3,5]; const diff = arr[0]  arr[5]; // true 

В данном случае arr[0] указывает на элемент массива с индексом 0 . Его значение равно 1 . Аналогично, arr[5] соответствует значению 3 элемента массива с индексом 5 . Результат сравнения 1 < 3 соответствует истине, т.е. true .

26 сентября 2022

Чтобы сравнить элементы массива между собой можно воспользоваться методом sort который, в свою очередь, может принимать аргументом функцию сортировки. Пример ниже создаст отсортированный массив по возрастанию.

const arr = [10,12,3,8,5,6,1]; const filtered = arr1.sort((a, b) => a - b); 

Нужно учесть, что метод sort — мутирует и исходный массив. Т.е. arr тоже будет отсортирован.

как сравнить два массива в 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 скопировалась ссылку на этот массив, а не значение.

Сравнение двух массивов с объектами

Вопрос, массивы отсортированы, и 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);

Как сравнить два массива в js?

Есть допустим 2 массива.
Одинаковые по содержимому, только в одном на один элемент больше.
Как их сравнить, что бы вытащить элемент которого не хватает во втором массиве?
Заранее спасибо.

  • Вопрос задан более трёх лет назад
  • 102171 просмотр

Комментировать
Решения вопроса 2
Stalker_RED @Stalker_RED
Обновил ответ, старая реализация была с багом.

function diff(a1, a2) < return a1.filter(i=>a2.indexOf(i)<0) .concat(a2.filter(i=>a1.indexOf(i) <0)) >function compare(a1, a2) < return a1.length == a2.length && a1.every((v,i)=>v === a2[i]) >

upd: в ES7 (2016) появился метод includes

const diff = function(a1, a2) < return a1.filter(i=>!a2.includes(i)) .concat(a2.filter(i=>!a1.includes(i))) >

Ответ написан более трёх лет назад
Нравится 9 2 комментария

Ckomop0x

vetero4eg

Понимаю, что уже не актуально, но, это решение не поможет вернуть разницу, если элементы повторяются (по значению), ну например

a1 = [1,1,1,1] a2 = [1,1,1]

IonDen

JavaScript developer. IonDen.com
Например вот так на lodash:
jsfiddle.net/IonDen/pgt8xdgw

var a = [1, 2, 3, 4, 5], b = [1, 2, 3, 4, 5, 6]; function diff (a, b) < if (a.length >b.length) < return _.difference(a, b); >else < return _.difference(b, a); >> console.log(_.difference(b, a)); // [6]

Ответ написан более трёх лет назад
Нравится 5 2 комментария

geek01

Я и не знал про такие возможнсти js)) Только вы забыли вывести саму функцию diff(b, a), вместо этого выводите сразу обработчик разницы без сравнения, какой массив больше

geek01

А, все нормлано, это не возможности js. Не заметил, что это доп библиотека.
Ответы на вопрос 2
Антон Шаманов @SilenceOfWinter
та еще зажигалка.
Как вариант можно сериализовать и сравнить строки банальным ==
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
электрик,усусь на front

Я только начинаю учить. Для меня более понятный такой формат кода. Может кому то поможет. Добавил сортировку от меньшего к большему и наоборот.

var a1 = [1,2,3,99,88,77,89,-99,-199] a2 = [1,2,3,8,89,9,-99,6,-77] function sortMyArray(a,b) < return b - a; >function sortMyArrayR(a,b) < return a - b; >function comparison () < return a1.filter(i=>a2.indexOf(i)<0).concat(a2.filter(i=>a1.indexOf(i) <0)) >write.innerHTML += "["+comparison(a1,a2).sort(sortMyArray)+"]"; arr.innerHTML += "["+ a1.sort(sortMyArray).toString()+"] \t["+a2.toString()+"]" writeRev.innerHTML += "["+comparison(a1,a2).sort(sortMyArrayR)+"]";

  

compare:

compareReverse:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *