這是我嘗試將一行資料從一個物件傳輸到另一個物件。我想知道是否有更有效的方法來做到這一點。
串列中的元素selected_city_codes將是要從 轉移airport_data_2到的元素airport_data_1。
原始資料和嘗試
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" :"03:00","arrival_time":"05:00","city_id":"DEN"},
{"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"}];
selected_city_codes = ['SJC','JFK']; //items to remove from `airport_data_2` to `airport_data_1`
function move_and_delete_data(obj_1, obj_2,list){
for(i in list) {
for (j in obj_2){
if(list[i] == obj_2[j].city_id){
obj_1.push(obj_2[j]);
}
}
}
for(i in list) {
obj_2 = obj_2.filter(item => item.city_id != list[i]);
}
}
move_and_delete_data(airport_data_1, airport_data_2,selected_city_codes);
期望的結果
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 = [{"departure_time" :"03:00","arrival_time":"05:00","city_id":"DEN"}];
uj5u.com熱心網友回復:
使用擴展語法附加一個過濾airport_data_2器。airport_data_1
接下來重新分配airport_data_2,使用過濾器洗掉先前附加的元素(因此與第一個過濾器相反)。
let 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"}];
let airport_data_2 = [{"departure_time" :"03:00","arrival_time":"05:00","city_id":"DEN"},
{"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_1 = [...airport_data_1, ...airport_data_2.filter(r => r.city_id !== `DEN`)];
airport_data_2 = airport_data_2.filter(r => r.city_id === `DEN`);
document.querySelector(`pre`).textContent = `*airport_data_1
${JSON.stringify(airport_data_1, null, 2)}
*airport_data_2
${JSON.stringify(airport_data_2, null, 2)}`;
<pre></pre>
uj5u.com熱心網友回復:
我建議使用擴展語法以及Array.filter()和Array.includes()來獲取所需的陣列。
第一個陣列將包含 airport_data_1 中的所有元素,以及 airport_data_2 中的匹配元素。
第二個陣列將僅包含來自 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"}];
airport_data_2 = [{"departure_time" :"03:00","arrival_time":"05:00","city_id":"DEN"}, {"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"}];
selected_city_codes = ['SJC','JFK']; //items to remove from `airport_data_2` to `airport_data_1`
function move_and_delete_data(obj_1, obj_2, list) {
obj_1.push(...obj_2.filter(item => list.includes(item.city_id)));
obj_2.splice(0, obj_2.length, obj_2.filter(item => !list.includes(item.city_id)))
}
move_and_delete_data(airport_data_1, airport_data_2, selected_city_codes)
console.log({ airport_data_1, airport_data_2 })
.as-console-wrapper { max-height: 100% !important; top: 0; }
這是另一個版本,它將回傳更新的陣列而不是就地修改:
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" :"03:00","arrival_time":"05:00","city_id":"DEN"}, {"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"}];
selected_city_codes = ['SJC','JFK']; //items to remove from `airport_data_2` to `airport_data_1`
function move_and_delete_data(obj_1, obj_2, list) {
return [
[...obj_1, ...obj_2.filter(item => list.includes(item.city_id))],
obj_2.filter(item => !list.includes(item.city_id))
];
}
[airport_data_1, airport_data_2] = move_and_delete_data(airport_data_1, airport_data_2, selected_city_codes)
console.log({ airport_data_1, airport_data_2 })
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
不需要任何花哨的東西,您可以在回圈中迭代第二個陣列for和push/splice包含在傳遞串列中的物件。
function move_and_delete_data(obj_1, obj_2, list) {
for (let i = 0; i < obj_2.length; ) {
if (list.includes(obj_2[i].city_id)) {
obj_1.push(...obj_2.splice(i, 1));
continue;
}
i ;
}
}
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"}];
const airport_data_2 = [{"departure_time" :"03:00","arrival_time":"05:00","city_id":"DEN"}, {"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_2` to `airport_data_1`
move_and_delete_data(airport_data_1, airport_data_2, selected_city_codes);
console.log({ airport_data_1, airport_data_2 });
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/416668.html
標籤:
