Best way to move certain rows out of one object to another

Viewed 44

just wondering what is the best way to filter out data from one object to another using an array

I want to move the entire rows within selected_city_codes from airport_data_1 to airport_data_2

airport_data_1 = [{"departure_time":"12:00","arrival_time":"03:00","city_id":"BOS"},  
{"departure_time" :"12:00","arrival_time":"03:00","city_id":"BOS"},
{"departure_time" :"01:00","arrival_time":"04:00","city_id":"SFO"},
{"departure_time" :"03:00","arrival_time":"05:00","city_id":"BOS"},
{"departure_time" :"03:00","arrival_time":"05:00","city_id":"SFO"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"SJC"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"JFK"},
{"departure_time" :"06:00","arrival_time":"09:00","city_id":"SJC"}];

airport_data_2 = [];

selected_city_codes = ['SJC','JFK']; //items to remove from `airport_data_1` to `airport_data_2`

//my attempt to remove the listed values from selected_city_codes
for(i in selected_city_codes) { 
    airport_data_2 = airport_data_2.filter(item => item.city_id != selected_city_codes[i]);
}

Desired result

airport_data_1 = [{"departure_time":"12:00","arrival_time":"03:00","city_id":"BOS"},  
{"departure_time" :"12:00","arrival_time":"03:00","city_id":"BOS"},
{"departure_time" :"01:00","arrival_time":"04:00","city_id":"SFO"},
{"departure_time" :"03:00","arrival_time":"05:00","city_id":"BOS"},
{"departure_time" :"03:00","arrival_time":"05:00","city_id":"SFO"}]; 


airport_data_2 = [{"departure_time" :"04:00","arrival_time":"06:00","city_id":"SJC"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"JFK"},
{"departure_time" :"06:00","arrival_time":"09:00","city_id":"SJC"}]; 
2 Answers

You have to filter the first array and use something like includes to check if city_id is in selected_city_codes:

const airport_data_1 = [
  { departure_time: '12:00', arrival_time: '03:00', city_id: 'BOS' },
  { departure_time: '12:00', arrival_time: '03:00', city_id: 'BOS' },
  { departure_time: '01:00', arrival_time: '04:00', city_id: 'SFO' },
  { departure_time: '03:00', arrival_time: '05:00', city_id: 'BOS' },
  { departure_time: '03:00', arrival_time: '05:00', city_id: 'SFO' },
  { departure_time: '04:00', arrival_time: '06:00', city_id: 'SJC' },
  { departure_time: '04:00', arrival_time: '06:00', city_id: 'JFK' },
  { departure_time: '06:00', arrival_time: '09:00', city_id: 'SJC' },
];
const selected_city_codes = ['SJC', 'JFK'];

const airport_data_2 = airport_data_1.filter((el) =>
  selected_city_codes.includes(el.city_id)
);
console.log(airport_data_2);

You could make use of array.reduce() to split original array into two parts.

const airport_data_1 = [{"departure_time":"12:00","arrival_time":"03:00","city_id":"BOS"},  
{"departure_time" :"12:00","arrival_time":"03:00","city_id":"BOS"},
{"departure_time" :"01:00","arrival_time":"04:00","city_id":"SFO"},
{"departure_time" :"03:00","arrival_time":"05:00","city_id":"BOS"},
{"departure_time" :"03:00","arrival_time":"05:00","city_id":"SFO"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"SJC"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"JFK"},
{"departure_time" :"06:00","arrival_time":"09:00","city_id":"SJC"}];


const selected_city_codes = ['SJC','JFK']; //items to remove from `airport_data_1` to `airport_data_2`


const data = airport_data_1.reduce((s, x) => { 
  s[ selected_city_codes.indexOf(x.city_id) < 0 ].push(x) ; return s;} , {true: [], false:[]} )

const data_1 = data.true;

const airport_data_2 = data.false;

console.log('airport_data_1 ', data_1);

console.log('airport_data_2 ', airport_data_2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Related