Сравнение массивов
Здравствуйте, есть два массива, такого вида:
0: {id: "driver_socket_1", latitude: -11.37080786775757, longitude: -27.69586199177322, iconUrl: "assets/carIcon.png"} 1: {id: "driver_socket_2", latitude: -28.24136677583389, longitude: -10.25425740195638, iconUrl: "assets/carIcon.png"} 2: {id: "driver_socket_3", latitude: -40.95439940439371, longitude: -27.673982748204622, iconUrl: "assets/carIcon.png"} 3: {id: "driver_socket_4", latitude: -22.490445128116, longitude: 9.730743699541932, iconUrl: "assets/carIcon.png"} 4: {id: "driver_socket_5", latitude: -8.14232867010616, longitude: -5.386359633011523, iconUrl: "assets/carIcon.png"} Первый массив пустой, второй приходит с сервера. Первый раз когда приходит, присваиваю второй массив к первому. Но вот потом, каждый раз когда приходит, нужно сравнить локальный массив и с сервера, если координаты меняются, нужно изменить именно их. Вопрос как сравнить два массива и если координаты отличаются, поменять их, не обязательно чистый жс, можно лодаш ( jquery не желательно). До этого просто каждый раз присваивал массив, но это не подходит :) |
shoopik, в цикле пробежаться по массиву не пробовали?
var data,//Текущие данные new_data,//Новые данные indexed_data={};//id=>item data.forEach(function(item){ indexed_data[item.id]=item; }); data=new_data.map(function(item){ var old_item=indexed_data[item.id]||false; if(!old_item)//Is new item return item; ['latitude','longitude'].forEach(function(key){//Update fields if(item[key]!=old_item[key]) old_item[key]=item[key]; }); return old_item; }); |
shoopik,
а каждый последующий раз приходит весь массив целиком, или только те пункты, которые поменялись? Могут ли приходить новые пункты, с теми id, которых ещё не было? Могут ли удаляться пункты? |
Цитата:
каждый раз весь массив целиком, могут приходить те, которых не было, пункты(водители) могут удаляться :) |
Цитата:
|
shoopik, изменил пост №2
|
Цитата:
или тебе надо отследить изменения? |
Цитата:
|
Цитата:
|
shoopik,
Цитата:
делать не только присвоение, а и запустить функцию изменения координат |
Часовой пояс GMT +3, время: 04:24. |