我有一个像这样的嵌套数组:
array = [
[
'Bear',
[
{
name: 'bob',
age: '17,'
},
{
name: 'sam',
age: '18,'
},
],
],
[
'dog',
[
{
name: 'bon',
age: '19,'
},
],
],
];
我需要删除/删除该对象: { 名称:“ bon”, 年龄:“ 19岁” }, 如果上面的数组没有对象,那么上面的数组(在本例中为dog)也应删除 什么是最干净的方法?我尝试过过滤器,但无济于事。不确定如何以干净的方式执行此操作。任何帮助将不胜感激。
答案 0 :(得分:2)
如果要删除Exception in thread "main" java.lang.NullPointerException
at com.company.WriteSquat.main(WriteSquat.java:63)
中的项目,然后要根据过滤器的数量删除同级数组,则可以使用reduce
和filter
,如下所示:>
name === 'bon'
答案 1 :(得分:1)
如果您应该根据年龄过滤人员,我会保持键和值的动态。它返回一个具有预期结果的新数组。
array = [
['Bear', [{name: 'bob', age: '17,'},{name: 'sam', age: '18,'}]],
['dog', [{name: 'bon', age: '19'}]],
];
function customFilter(array,key,value) {
return array.filter(([animal,list]) => {
list = list.filter(item => item[key] !== value);
if(list.length == 0)
return false;
return true;
});
}
console.log(customFilter(array,'name','bon'));
答案 2 :(得分:0)
您可以映射到主数组并从子数组中过滤出项,然后再次映射以在其为空时删除项列表:
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'));
答案 3 :(得分:0)
尝试这个-
array = [
[
'Bear',
[
{
name: 'bob',
age: '17,'
},
{
name: 'sam',
age: '18,'
},
],
],
[
'dog',
[
{
name: 'bon',
age: '19,'
},
],
],
];
for(var i =0; i< array.length; i++){
console.log(array[i][0], array[i][1], array[i][1].length);
if(array[i][1].length <= 1){
delete(array[i]);
}
}
console.log(array);