У меня есть два массива с «билетами», которые мне нужно обновлять каждые 3 секунды, проблема в том, что по соображениям анимации я не могу просто перезаписать первый массив так, как второй.
Вот так:
let array_1 = [1, 2, 3, 5]; //diff 3, 5
let array_2 = [1, 2, 6, 7]; //diff 6, 7
Мне нужно сравнить два массива, удалить"3 и 5" и push"6 и 7" с первыммассив, оставляя первый массив следующим образом:
array_1 = [1, 2, 6, 7];
Как это сделать?
[РЕДАКТИРОВАТЬ]
В целях пояснения, в настоящее время я строю динамическую картукоторый получает новую информацию каждые несколько секунд, как объекты (что является болью в заднице для сравнения).
I CANNOT имеют третий массив или перезаписывают первый, потому что это приведет кмаркеры должны «мигать» на карте, поэтому я должен манипулировать первым.
Я использовал ответ @Andrew Yochum ниже, чтобы найти решение следующим образом:
let array_1 = [
{serial_number: 'abc', lat: 1, lng: 1},
{serial_number: 'def', lat: 2, lng: 2},
{serial_number: 'ghi', lat: 3, lng: 3},
];
let array_2 = [
{serial_number: 'abc', lat: 1, lng: 1},
{serial_number: 'def', lat: 2, lng: 2},
{serial_number: 'jkl', lat: 4, lng: 4},
{serial_number: 'mno', lat: 5, lng: 5},
];
let compare_1 = JSON.parse(JSON.stringify(array_1));
compare_1 = compare_1.map(el => JSON.stringify(el));
let compare_2 = JSON.parse(JSON.stringify(array_2));
compare_2 = compare_2.map(el => JSON.stringify(el));
let removeArray = [...compare_1.filter(i => !compare_2.includes(i))];
let addArray = [...compare_2.filter(i => !compare_1.includes(i))];
compare_1.forEach((first_el) => {
removeArray.forEach((second_el) => {
if(first_el == second_el){
array_1.splice(compare_1.indexOf(first_el, 1));
}
});
});
addArray.forEach((element) => {
array_1.push(JSON.parse(element));
});
Есть ли способ оптимизировать это?