Вы можете отобразить основной массив и отфильтровать элементы из подмассива, а затем снова отобразить, чтобы удалить список элементов, когда он пуст:
let array = [
[
'Bear',
[
{
name: 'bob',
age: '17,',
},
{
name: 'sam',
age: '18,',
},
],
],
[
'dog',
[
{
name: 'bon',
age: '19,',
},
],
],
];
console.log(
array
.map(([name, list]) => [
name,
list.filter((item) => item.name !== 'bon'),
])
.map(
//remove empty lists
([name, list]) =>
list.length === 0 ? [name] : [name, list],
),
);
Вы можете даже отдельно передать функцию фильтра:
const array = [["Bear",[{"name":"bob","age":"17,"},{"name":"sam","age":"18,"}]],["dog",[{"name":"bon","age":"19,"}]]];
const filterBy = (arr, filterFunction) =>
arr
.map(([name, list]) => [
name,
list.filter(filterFunction),
])
.map(
//remove empty lists
([name, list]) =>
list.length === 0 ? [name] : [name, list],
);
console.log(filterBy(array, (item) => item.name !== 'bon'));