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

Как сверить 2 массивы и удалить одинаковые значения?

Предположим есть массив есть массив
a = {"a": "17","b": "1","d": "3","v": "10","e": "4","f": "9"}
и есть второй массив
b = {"a": "1","b": "3","d": "4","v": "5","e": "6","f": "7"}

Как мне узнать какие значения есть в массиве a и нет в массиве b ? или как узнать какие значения есть в массиве b и нет в массиве a . То есть например мы сравниваем массив a c b , и в результате сравнение мы должны узнать что в массиве a есть значения 17, 10 9 которых нет в массиве b. Или же мы сравниваем b c a , и в результате сравнения мы должны узнать что в массиве b есть 5, 6, 7 которых нет в в массиве a .

Как делать подобные сравнения ?

ту проблему я изначально решал смерджив два этих массива убрав полностью повторяющиеся элементы оставив ток уникальные. То теперь стала задача узнать в каком именно из массивов есть те или иные уникальные элементы. Вот это не получается...

если объединить два этих массива а потом оставить ток уникальные значения то получится {17, 10, 9, 5, 6, 7}. Но ток мы тогда не узнаем и с какого именно массива уникальные элементы . Как это узнать ?
  • Вопрос задан
  • 10645 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 3
profesor08
@profesor08 Куратор тега JavaScript
Как, как? Ручками! Только это не массивы, а объекты с полями.
var a = {"a": "17","b": "1","d": "3","v": "10","e": "4","f": "9"};
var b = {"a": "1", "b": "3","d": "4","v": "5", "e": "6","f": "7"};

function search(a, b) {
  var result = [];
  for(var akey in a) {
    var found = false;
    for(var bkey in b) {
      if (a[akey] == b[bkey]) {
        found = true;
        continue;
      }
    }
    if (!found) {
      result.push(a[akey]);
    }
  }
  return result;
}

console.log(search(a, b));


Каждый элемент массава А ищем в массиве Б. Если не находим его, то добавляем в результирующий массив.

А теперь пример с массивами.
var a = [17, 1, 3, 0, 4, 9];
var b = [1, 3, 4, 5, 6, 7];

function search(a, b) {
  var result = [];
  for(var i = 0; i < a.length; i++) {
    if (b.indexOf(a[i]) == -1) {
      result.push(a[i]);
    }
  }
  return result;
}

console.log(search(a, b));
console.log(search(b, a));


Или так:
var a = [17, 1, 3, 0, 4, 9];
var b = [1, 3, 4, 5, 6, 7];

function search(a, b) {
  var result = [];
  a.forEach(function(v) {
    if (b.indexOf(v) == -1) {
      result.push(v);
    }
  });
  return result;
}

console.log(search(a, b));
console.log(search(b, a));
Ответ написан
Комментировать
@sanex3339
загуглите фразу "javascript array diff". В первом же результате на StackOverflow будет реализация данной ф-ии.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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