Я пытаюсь удалить строку из объекта, если эта строка имеет те же значения, что и свойство, которое я хочу удалить.
Это моя попытка, и она работает, просто интересно, есть ли более эффективный способ
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"}];
function remove_airport_row(obj, prop1, prop2, prop3) {
var i = obj.length;
if (i) { // (not 0)
while (--i) {
var current = obj[i];
if (current.departure_time == prop1 && current.arrival_time == prop2 && current.city_id == prop3) {
obj.splice(i, 1);
}
}
}
}
remove_airport_row(airport_data_1, "06:00","09:00","SJC");
console.log(JSON.stringify(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"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"SJC"},
{"departure_time" :"04:00","arrival_time":"06:00","city_id":"JFK"}];
3 ответа
Даже не указывайте свойства в качестве аргументов. Вы можете определить их как object
.
Это тоже сработает
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" },
];
function remove_airport_row(arr, obj) {
return arr.filter((row) => {
// ingore the row if all the the properties matches to obj
return !Object.entries(obj).every(([key, value]) => row[key] === value);
})
}
console.log(remove_airport_row(airport_data_1, {
departure_time: "06:00",
arrival_time: "09:00",
city_id: "SJC",
}));
См. документы: Object.entries, Array.prototype.every, Array.prototype.filter если вы с ними не знакомы.
Вы можете .filter() для удаления всех элементов, где все три реквизита равны:
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"}
];
function remove_airport_row(obj, prop1, prop2, prop3) {
return obj.filter(el => el.departure_time !== prop1 || el.arrival_time !== prop2 || el.city_id !== prop3);
}
console.log(remove_airport_row(airport_data_1, "06:00","09:00","SJC"));
Вы можете использовать методы filter
массивов:
const filteredArray = airport_data_1.filter(airport => {
return !(
airport.departure_time === "06:00" &&
airport. arrival_time "09:00" &&
airport.city_id === "SJC"
);
});
Таким образом, у вас будет новый массив (filteredArray
), который будет содержать все элементы airport_data_1
, исключая элемент с выбранными вами данными. Если вы предпочитаете удалить его непосредственно из исходного массива вместо создания очищенной копии, вы можете использовать метод findIndex
:
const removeId = airport_data_1.findIndex(airport => {
return (
airport.departure_time === "06:00" &&
airport. arrival_time "09:00" &&
airport.city_id === "SJC"
);
});
airport_data_1.splice(removeId, 1);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.