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

如何过滤对象中嵌套translations内field为name的text值

文档数组过滤:匹配translations中name字段的文本值

现有数据结构

[
    {
        "id": 61,
        "created_at": "2022-11-02T15:36:25+00:00",
        "updated_at": "2022-11-02T15:36:25+00:00",
        "translations": [
            {
                "field": "name",
                "lang": "it",
                "text": "IT_Codice di Condotta_NEW"
            },
            {
                "field": "name",
                "lang": "en",
                "text": "EN_Code of Conduct_NEW"
            },
            {
                "field": "pdf_url",
                "lang": "en",
                "text": "/var/www/vhosts/marchettopellami.com/reservedarea.marchettopellami.com/docs/docs/en/a-20221125081444740491.pdf"
            },
            {
                "field": "pdf_url",
                "lang": "it",
                "text": "/var/www/vhosts/marchettopellami.com/reservedarea.marchettopellami.com/docs/docs/it/draft-20221127194030220505.pdf"
            }
        ]
    },
    {
        "id": 63,
        "created_at": "2022-11-02T15:38:40+00:00",
        "updated_at": "2022-11-02T15:38:40+00:00",
        "translations": [
            {
                "field": "name",
                "lang": "it",
                "text": "IT_NEW"
            },
            {
                "field": "name",
                "lang": "en",
                "text": "EN_NEW"
            },
            {
                "field": "pdf_url",
                "lang": "en",
                "text": "TheFerrari-GlobalMarketingStrategy-20221124133159490323.pdf"
            },
            {
                "field": "pdf_url",
                "lang": "it",
                "text": "20221124160623761884.pdf"
            }
        ]
    }
]

需求与原有问题

需求是过滤出translations数组中field为"name"的元素对应的text值匹配输入关键词的文档(例如匹配IT_Codice di Condotta_NEW或EN_Code of Conduct_NEW)。

原有代码仅能匹配id、created_at、updated_at这些基础字段,无法遍历translations数组里的内容:

const resultsArray = documents.filter((d) => {
    return Object.values(d)
        .join(" ").toLowerCase()
        .includes(e.target.value.toLowerCase())
});

修改后的代码方案

我们需要单独处理translations数组,筛选出其中field为"name"的文本,再和基础字段一起做匹配:

const searchTerm = e.target.value.toLowerCase();
const resultsArray = documents.filter(doc => {
    // 匹配基础字段(id、created_at、updated_at)
    const baseFieldsMatch = Object.values(doc)
        .filter(val => typeof val !== 'object') // 排除translations数组
        .join(" ").toLowerCase()
        .includes(searchTerm);
    
    // 匹配translations中field为name的text值
    const nameTranslationsMatch = doc.translations.some(translation => {
        return translation.field === 'name' && 
               translation.text.toLowerCase().includes(searchTerm);
    });
    
    // 只要基础字段或name文本有一个匹配就保留该文档
    return baseFieldsMatch || nameTranslationsMatch;
});

代码说明

  1. 先提取并统一转换搜索关键词为小写,避免大小写敏感问题
  2. baseFieldsMatch:保留原有对基础字段的匹配逻辑,但排除了translations这个数组类型的值
  3. nameTranslationsMatch:使用Array.some()遍历translations数组,只要有一个field为"name"且文本包含搜索词的元素,就返回true
  4. 最终返回基础字段匹配或name文本匹配的文档,满足需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:50