Задать вопрос

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

Есть допустим 2 массива.
Одинаковые по содержимому, только в одном на один элемент больше.
Как их сравнить, что бы вытащить элемент которого не хватает во втором массиве?
Заранее спасибо.
  • Вопрос задан
  • 103151 просмотр
Подписаться 6 Простой Комментировать
Решения вопроса 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])
}

jsfiddle.net/Stalk/7h5ahq5k/2

upd: в ES7 (2016) появился метод includes
const diff = function(a1, a2) {
    return a1.filter(i=>!a2.includes(i))
    .concat(a2.filter(i=>!a1.includes(i)))
}
https://jsfiddle.net/Stalk/7h5ahq5k/9/
Ответ написан
IonDen
@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]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
Как вариант можно сериализовать и сравнить строки банальным ==
Ответ написан
Комментировать
@Fedechkin
электрик,усусь на 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)+"]";


<p id="arr"></p>
    <p id="write">
        compare:
    </p>
    <p id="writeRev">
        compareReverse:
    </p>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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