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

如何按国家名称过滤含嵌套countries数组的对象数组

过滤包含指定国家的对象数组

现有对象数组allItems,每个元素对象包含name和countries属性,其中countries是由多个含label(国家名称)和TermGuid属性的对象组成的数组。需要根据字符串参数searchByCountry,筛选出countries数组中存在label值与该参数匹配的对象。

示例输入

var allItems = [{
  name: 'Item1',
  countries: [
      {label: 'Argentina', TermGuid: 'abc'},
      {label: 'Germany', TermGuid: 'abc'},
      {label: 'Bosnia', TermGuid: 'abc'},
      {label: 'France', TermGuid: 'abc'},
      {label: 'UK', TermGuid: 'abc'}
    ]
  },
  {
   name: 'Item2',
   countries: [
    {label: 'Argentina', TermGuid: 'abc'}
   ]
  },
  {
   name: 'Item3',
   countries: [
    {label: 'Bosnia', TermGuid: 'abc'}
   ]
  },
  {
   name: 'Item4',
   countries: [
    {label: 'All', TermGuid: 'abc'}
   ]
  }
]

var searchByCountry = 'Bosnia';

预期输出

当searchByCountry为'Bosnia'时,筛选结果如下:

var filteredItems = [{
  name: 'Item1',
  countries: [
      {label: 'Argentina', TermGuid: 'abc'},
      {label: 'Germany', TermGuid: 'abc'},
      {label: 'Bosnia', TermGuid: 'abc'},
      {label: 'France', TermGuid: 'abc'},
      {label: 'UK', TermGuid: 'abc'}
    ]
  },
  {
   name: 'Item3',
   countries: [
    {label: 'Bosnia', TermGuid: 'abc'}
   ]
  }
]

解决方案

可以使用数组的filter()方法结合some()方法实现需求:

const filteredItems = allItems.filter(item => 
  item.countries.some(country => country.label === searchByCountry)
);

代码说明

  • filter()遍历allItems数组,仅保留回调函数返回true的元素
  • some()检查当前元素的countries数组中,是否存在至少一个对象的label值与searchByCountry完全匹配,只要有一个匹配就返回true

如果需要忽略大小写进行匹配,可将判断条件修改为:

country.label.toLowerCase() === searchByCountry.toLowerCase()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:45:57