Работает ли что-то подобное для вас?:
const removeNonselected = (x) =>
Array .isArray (x)
? x .reduce (
(all, item) => item .selected === false
? all
: all .concat (removeNonselected (item)),
[]
)
: typeof x == 'object'
? Object .fromEntries (
Object .entries (x) .map(([n, v]) => [n, removeNonselected(v)])
)
: x
const data = [{partyId: "animal-ID-001", selected: false, members: [{selected: false, userId: "animal-user-3443"}, {selected: false, userId: "animal-user-3444"}]}, {partyId: "benjamin-ID-002", selected: true, members: [{selected: true, userId: "benjamin-user-5567", teams: [{selected: true, teamId: "team-benjamin-678"}, {selected: false, teamId: "team-benjamin-3468"}]}, {selected: false, userId: "benjamin-user-55671"}]}, {partyId: "crystal-ID-003", selected: true, members: [{selected: true, userId: "crystal-user-8567"}, {selected: true, userId: "crystal-user-85671"}], aliens: [{selected: false, alienId: "crystal-alien-467"}, {selected: false, alienId: "crystal-alien-230"}]}];
console .log (removeNonselected (data))
console .log ('original data unchanged:')
console .log (data)
Это обрабатывает три случая: где данные являются массивом, где это объект или где-то еще. Для массива мы сохраняем только выбранные (где selected
не false
) и повторяем эти значения. Для объекта мы сохраняем другие значения без изменений, но возвращаемся к свойствам массива. Все остальное, что мы просто возвращаем как есть.
Это не удаляет свойство selected: false
объекта, только из массива. Добавить это было бы не намного сложнее, но, похоже, это не соответствует вашим требованиям.
Если ваша среда не поддерживает Object.fromEntries
, ее легко подобрать .