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

如何从对象数组中提取指定name对应的value值并整理为数组

解决方法

首先注意:你提供的数组存在语法错误,tags 应该是数组形式(用 [] 包裹内部对象),否则无法使用数组方法。修正后的数组如下:

const my_tags = [
  {
    item: 1,
    tags: [
      {name: 'LandingPage', value: 'true'},
      {name: 'Country', value: 'GB'},
      {name: 'Carrier', value: 'Evri'},
      {name: 'EventCode', value: 'Dispatched'},
    ]
  },
  {
    item: 2,
    tags: [
      {name: 'LandingPage', value: 'true'},
      {name: 'Country', value: 'USA'},
      {name: 'Carrier', value: 'RoyalMail'},
      {name: 'EventCode', value: 'Dispatched'},
    ]
  }
];

方式1:按「先所有Country,再所有Carrier」的顺序提取

如果你需要严格得到 ['GB', 'USA', 'Evri', 'RoyalMail'] 这个顺序,可以分两次遍历提取:

const result = [];

// 提取所有Country的value
my_tags.forEach(item => {
  const countryTag = item.tags.find(tag => tag.name === 'Country');
  result.push(countryTag.value);
});

// 提取所有Carrier的value
my_tags.forEach(item => {
  const carrierTag = item.tags.find(tag => tag.name === 'Carrier');
  result.push(carrierTag.value);
});

console.log(result); // 输出: ['GB', 'USA', 'Evri', 'RoyalMail']

方式2:用链式调用快速提取(按每个item内的标签顺序)

如果不严格要求顺序,只想一次性提取所有目标标签的value,可以用 flatMap + filter + map 组合:

const targetTags = ['Country', 'Carrier'];
const result = my_tags.flatMap(item => 
  item.tags
    .filter(tag => targetTags.includes(tag.name))
    .map(tag => tag.value)
);

console.log(result); // 输出: ['GB', 'Evri', 'USA', 'RoyalMail']

关键说明

  • find 方法用于精准匹配单个标签名,适合你需要指定特定标签的场景
  • flatMap 可以直接将嵌套的数组结果扁平化,避免额外调用 flat()
  • 先修正数组语法是前提,否则所有数组方法都会报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:42:49