@damir87

Сравнение двух json объектов?

Буду очень признателен в вашей помощи!
У меня имеется два json объекта и работа происходит с ними в jquery. Первый json->arr1 я получаю при нажатии кнопки в нём может быть различное количество объектов 10,100, 200.... вывожу их на карту
Если пользователь производит действия то срабатывает ajax-запрос который получает json->arr2 и в нём получаю различное число объектов 7,35, 178....
1) Хочу получить разность между двумя json объектами то есть сравнивая arr1 и arr2 чтобы получил объект
{Lattitude: '52,4043000', Location: 'a2', Longitude: '55,7181815', здесь у меня ещё какие-то параметры}
т.к при сравнении его нет в arr2

2) После выполнения 1го действия хочу вернуть эти объекты и уже добавлю на карту

3) Хотелось бы хранить все вновь добавленные точки в одном объекте, то есть при нажатии на кнопку при первом разе получили arr1- 45 объектов,вывели их на карту, затем происходит ajax запрос при перемещении карты, получаю с бд ещё допустим arr2 - 70 объектов, сравнивая arr1 и arr2 получаю 25 уникальных объектов которых ещё нет на карте, отображаю и после чего хочу 25 занести в arr1 получится 70 объектов, дальше уже будет цикличное сравнение 70 объектов в arr1 и подгрузил arr2 150 опять сравниваем их и т.д -
Написал такую штуку по документации получение уникальных для своего 3) случая - var uniqueAll = $.unique($.merge(arr1, arr2));
Пример данных:
arr1 = [
  {Lattitude: '52,4043000', Location: 'a2', Longitude: '55,7181815', здесь у меня ещё какие-то параметры},
    {Lattitude: '52,3882320', Location: 'b2', Longitude: '55,7225500', здесь у меня ещё какие-то параметры},
    {Lattitude: '52,4041184', Location: 'c2', Longitude: '55,7172296', здесь у меня ещё какие-то параметры},
    {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200249', здесь у меня ещё какие-то параметры},
];

arr2 = [
    {Lattitude: '52,3882320', Location: 'b2', Longitude: '55,7225500', здесь у меня ещё какие-то параметры},
    {Lattitude: '52,4041184', Location: 'c2', Longitude: '55,7172296', здесь у меня ещё какие-то параметры},
    {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200249', здесь у меня ещё какие-то параметры}
];


Код который имеется для сравнения arr1 и arr2 не срабатывает сравнение.

function objDiff(arr1, arr2) {
                var resultArray = [];
                for (var i = 0; i < arr1.length; i++) {
                    var found = false;
                    for (var j = 0; arr2.length; j++) {
                        //здесь вываливается ошибка arr2[j].Lattitude Undefined, но в json Объектах arr1,arr2 имеется всё нигде null-нет в Lattitude и Longitude
                        if (arr1[i].Lattitude== arr2[j].Lattitude && arr1[i].Longitude== arr2[j].Longitude) {
                            found = true;
                            break;
                        }
                    }
                    if (found == false) {
                        resultArray.push(arr1[i]);
                    }
                }
                return resultArray;
}
  • Вопрос задан
  • 3543 просмотра
Решения вопроса 1
@Scrum
Front-End developer
for (var j = 0; j < arr2.length; j++) {
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@damir87 Автор вопроса
Вариант 1
function objDiff(arr1, arr2) {
                var resultArray = [];
                for (var i = 0; i < arr1.length; i++) {
                    var found = false;
                    for (var j = 0; j < arr2.length; j++) {
                        if (arr1[i].Lattitude== arr2[j].Lattitude && arr1[i].Longitude== arr2[j].Longitude) {
                            found = true;
                            break;
                        }
                    }
                    if (found == false) {
                        resultArray.push(arr1[i]);
                        arr2.push(arr1[i]);
                    }
                }
                return resultArray;
}

Вариант 2
function convert(arr) {
  
  for(var k = 0, newArr = []; k < arr.length; k++ ){
    newArr.push(arr[k].Lattitude+';'+arr[k].Longitude);
  }
  
  return newArr;
  
}

function diff(arr1, arr2) {
  
  var tmpArr1 = convert(arr1),
      tmpArr2 = convert(arr2),
      result = [];
  
  for(var i = 0; i < arr1.length; i++){
    if(tmpArr2.indexOf(tmpArr1[i]) == -1) {
      result.push(arr1[i]);
      arr2.push(arr1[i]);
    }
  }
  
  return result;
  
}

arr1 = [
  {Lattitude: '52,4043000', Location: 'a2', Longitude: '55,7181815'},
    {Lattitude: '52,3882320', Location: 'b2', Longitude: '55,7225500'},
    {Lattitude: '52,4041184', Location: 'c2', Longitude: '55,7172296'},
    {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200249'},
  {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200240'},
];

arr2 = [
    {Lattitude: '52,3882320', Location: 'b2', Longitude: '55,7225500'},
    {Lattitude: '52,4041184', Location: 'c2', Longitude: '55,7172296'},
    {Lattitude: '52,3996194', Location: 'd2', Longitude: '55,7200249'}
];

console.log(diff(arr1, arr2))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы