delete obj
никогда не будет делать то, что вы хотите: во-первых, это даже не объект из вашего ввода, так как функция создала новый объект из найденного объекта, исключая subs
собственности, и вернул это.Но что более важно, delete
используется для удаления свойств, а не объектов.
Кажется, вы хотите удалить соответствующий объект из его родительского свойства subs
.Для этого вам необходимо изменить массив subs
, чтобы исключить соответствующий объект.Для того, чтобы это работало в общем виде, ваши входные данные должны быть массивом.В противном случае этот корневой объект не может быть удален из чего-либо.
Имея это в виду, ваша поисковая функция должна возвращать массив, в котором найдено совпадение и по какому индексу.С этими частями информации вы можете решить удалить этот элемент из массива или вставить другой объект с этим индексом.
Вот как это может работать с удалением:
const input=[{UID:2,GUID:"",LocationName:"USA",ParentLocation:null,subs:[{UID:42,GUID:"",LocationName:"New Jersey",Description:"",subs:[{UID:3,GUID:"",LocationName:"Essex County",ParentLocation:null,"subs":[{UID:4,LocationName:"Newark",ParentLocation:3,"subs":[{"UID":49,"GUID":"","LocationName":"Doctor Smith's Office","LocationType":{"UID":2,"LocationTypeName":"Practice","Description":"other location"},"subs":[{"HostID":38,"HostName":"Ocean Host",}]}]}]}]}]}];
const findUIDObj = (uid, arr) => {
if (!arr) return;
const idx = arr.findIndex(obj => obj.UID === uid);
if (idx > -1) return [arr, idx];
for (const obj of arr) {
const result = findUIDObj(uid, obj.subs);
if (result) return result;
}
};
console.log(findUIDObj(49, input));
const [arr, idx] = findUIDObj(49, input) || [];
if (arr) {
arr.splice(idx, 1); // Remove object from its parent array
}