You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中从嵌套对象数组筛选is_Y为'Y'的对象?

问题:筛选嵌套数组中is_Y为'Y'的对象并转为一维数组

原代码尝试筛选嵌套数组中is_Y === 'Y'的对象,但返回保留了原嵌套结构,无法得到期望的一维结果数组。

原代码

const tmpArray = [
    [{ "no": 1, "is_Y": "Y", }],
    [{ "no": 2, "is_Y": "N", }],
    [{ "no": 3, "is_Y": "Y", }],
    [{ "no": 3, "is_Y": "N", }],
    [{ "no": 4, "is_Y": "Y", }],
    [{ "no": 5, "is_Y": "N", }, { "no": 6, "is_Y": "Y" }]
];

function findY(array) {
    return array.filter(function (item) {
        return item.filter(function (item2) {
           return item2.is_Y === 'Y';
         });
    });
}

console.log(findY(tmpArray));

当前返回结果

[
  [ { no: 1, is_Y: 'Y' } ],
  [ { no: 2, is_Y: 'N' } ],
  [ { no: 3, is_Y: 'Y' } ],
  [ { no: 3, is_Y: 'N' } ],
  [ { no: 4, is_Y: 'Y' } ],
  [ { no: 5, is_Y: 'N' }, { no: 6, is_Y: 'Y' } ]
]

期望结果

[
  { no: 1, is_Y: 'Y' },
  { no: 3, is_Y: 'Y' },
  { no: 4, is_Y: 'Y' },
  { no: 6, is_Y: 'Y' } 
]
解决方案

方法一:扁平化数组后筛选

先使用flat()将嵌套数组转为一维,再用filter筛选符合条件的对象:

function findY(array) {
    // Infinity适配任意深度嵌套,已知两层也可写2
    return array.flat(Infinity).filter(item => item.is_Y === 'Y');
}

方法二:用reduce合并筛选结果

通过reduce遍历外层数组,将内层筛选出的符合条件对象合并到结果数组:

function findY(array) {
    return array.reduce((result, innerArr) => {
        return result.concat(innerArr.filter(item => item.is_Y === 'Y'));
    }, []);
}

方法三:手动遍历收集

通过两层forEach遍历数组,将符合条件的对象手动推入结果数组:

function findY(array) {
    const result = [];
    array.forEach(innerArr => {
        innerArr.forEach(item => {
            if (item.is_Y === 'Y') result.push(item);
        });
    });
    return result;
}

内容的提问来源于stack exchange,提问作者peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:41:13