如何从对象数组中提取指定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
相关产品推荐
相关产品推荐

