我有一个包含几个对象的数组:
const x = [
{label: 'a', data: [0,0]},
{label: 'b', data: [0,0]},
{label: 'c', data: [0,1]}
{label: 'd', data: [0,1]},
]
我想过滤掉数据值等于0的对象,并以
结束:const x = [
{label: 'c', data: [0,1]}
{label: 'd', data: [0,1]},
]
我试着:
const result = x.filter((x) => {
return x.data.filter((value) => value > 0);
});
期望.filter()
只返回值大于0的对象,但这没有按预期工作。
您的内部.filter()
方法总是返回一个数组,该数组被认为是真值。所以外层的.filter()
保存了所有的对象。相反,如果data
数组中的任何值都是> 0
,则可以使用.some()
返回true
,以将对象保留在结果数组中:
const x = [ {label: 'a', data: [0,0]}, {label: 'b', data: [0,0]}, {label: 'c', data: [0,1]}, {label: 'd', data: [0,1]}, ];
const result = x.filter((x) => {
return x.data.some((value) => value > 0);
});
console.log(result);
您可以根据主数组中数据对象中的某些值是否为0进行筛选,然后将它们保留在数组中。
const x = [
{ label: 'a', data: [0, 0] },
{ label: 'b', data: [0, 0] },
{ label: 'c', data: [0, 1] },
{ label: 'd', data: [0, 1] },
]
const res = x.filter(el => el.data.some(y => y!=0))
console.log(res)