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

如何在JavaScript中按unique_id过滤嵌套对象数据?

问题分析与解决方案

先看你提供的原始数据结构:

data = [{
    id: 1,
    tables: {
        headers: [
            {
                headerName: 'First Name',
                values: [
                    {id: 1, text_value: 'John', unique_id: '3UPYR2'},
                    {id: 2, text_value: 'Nick', unique_id: 'WKKHCM'}
                ]
            },
            {
                headerName: 'Last Name',
                values: [
                    {id: 1, text_value: 'Doe', unique_id: '3UPYR2'},
                    {id: 2, text_value: 'Smith', unique_id: 'WKKHCM'}
                ]
            }
        ]
    }
}]

你的需求是过滤每个header下的values数组,只保留指定unique_id的项,但你写的代码存在两个关键问题:

你的代码问题点

  1. 属性名拼写错误:原始数据里是rec.tables(复数形式),你写成了rec.table(单数),这会直接导致undefined.some()报错,或者返回false,最终过滤结果为空。
  2. 逻辑方向错误:data.filter()是用来筛选最外层的数组项(也就是你这里的整个对象),而不是修改内层的values数组。你当前的代码只是判断外层对象是否包含符合条件的unique_id,然后保留整个外层对象,完全没处理内层的values过滤。

正确实现方法

要实现需求,需要遍历外层数组,同时对每个对象里的tables.headers进行处理,过滤每个header.values数组,用map配合filter就能完成,同时注意不要修改原数据:

const myUniqueId = '3UPYR2'; // 你要过滤的目标unique_id

const filteredData = data.map(item => {
    // 复制外层对象,避免修改原数据
    return {
        ...item,
        tables: {
            // 处理tables里的headers数组
            headers: item.tables.headers.map(header => {
                return {
                    ...header,
                    // 过滤当前header下的values数组,只保留匹配项
                    values: header.values.filter(value => value.unique_id === myUniqueId)
                };
            })
        }
    };
});

console.log(filteredData);

这段代码的逻辑:

  • 用data.map()遍历最外层的每个对象,因为我们要保留所有外层对象,只修改内层结构
  • 对每个对象的tables.headers数组用map()遍历,保留每个header的其他属性,只修改values字段
  • 对每个header.values用filter()筛选出unique_id匹配的项

执行后就能得到你想要的结构:

[{
    id: 1,
    tables: {
        headers: [
            {
                headerName: 'First Name',
                values: [
                    {id: 1, text_value: 'John', unique_id: '3UPYR2'}
                ]
            },
            {
                headerName: 'Last Name',
                values: [
                    {id: 1, text_value: 'Doe', unique_id: '3UPYR2'}
                ]
            }
        ]
    }
}]

额外说明

如果你的原始数据里有多个外层对象,或者某个header.values里没有匹配项,这段代码也能处理:没有匹配项的values会变成空数组,外层对象都会被保留。如果需要过滤掉那些完全没有匹配项的外层对象,可以在map之后再加一层filter判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:42:56