如何基于嵌套数组数据过滤数组?



我有一个包含几个对象的数组:

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)

最新更新