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

如何在React/JS中按subject字段过滤嵌套JSON数据

按Subject过滤的解决方案

你之前的问题出在email_list是一个数组,不能直接通过email_list.subject访问属性,得遍历数组里的每一封邮件来判断subject是否匹配。以下是两种常见场景的实现方案:

场景1:过滤出包含指定Subject邮件的邮箱,同时保留该邮箱下符合条件的邮件列表

这个方案会返回原邮箱结构,但只保留包含目标subject的邮箱,且该邮箱的email_list只留下匹配的邮件:

const filterBySubject = (key, data) => {
  // 遍历所有邮箱,处理每个邮箱的邮件列表
  return data.map(mailbox => {
    // 过滤当前邮箱下符合subject条件的邮件
    const filteredEmails = mailbox.email_list.filter(email => 
      email.subject.includes(key)
    );
    // 仅当有匹配邮件时,返回更新后的邮箱对象
    if (filteredEmails.length > 0) {
      return { ...mailbox, email_list: filteredEmails };
    }
  }).filter(Boolean); // 剔除没有匹配邮件的空项
};

场景2:直接提取所有符合Subject条件的邮件(忽略所属邮箱)

如果只需要拿到所有匹配的邮件对象,不需要保留邮箱结构,可以用这个:

const extractEmailsBySubject = (key, data) => {
  let matchedEmails = [];
  // 遍历每个邮箱,收集匹配的邮件
  data.forEach(mailbox => {
    const matches = mailbox.email_list.filter(email => 
      email.subject.includes(key)
    );
    matchedEmails = [...matchedEmails, ...matches];
  });
  return matchedEmails;
};

调用示例

假设你的原始数据是mailbox数组:

const mailboxData = [
  {
    "mbname":"johndoe@test.ru",
    "email_list":[
      {
        "recipient": "john@doe.com",
        "subject": "This is a test mail",
        "from": "info@example.com",
        "received": "17.08.2022",
        "file_name": "testfile.txt"
      },
      {
        "recipient": "john@doe.com",
        "subject": "This is a test mail",
        "from": "info@example.com",
        "received": "17.08.2022",
        "file_name": ".testfile.txt"
      }
    ]
  }
];

// 场景1调用:返回符合条件的邮箱结构
const filteredMailboxes = filterBySubject("test mail", mailboxData);
console.log(filteredMailboxes);

// 场景2调用:返回所有匹配的邮件对象
const matchedEmails = extractEmailsBySubject("test mail", mailboxData);
console.log(matchedEmails);

如果需要同时结合mbname和subject过滤,可以先按mbname筛选邮箱,再在筛选后的邮箱里处理邮件列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:54:18