如何过滤category与header并获取匹配tabs数组项的索引
实现需求
已知固定入参:
- 分类入参
category:示例值为"Western Food" - 标签头入参
header:示例值为"Lamb chops"
待处理的data是结构化对象数组,单个数组项结构:
- 包含
category字段,存储分类值 - 包含
tabs数组,数组内每个元素是携带header字段的标签对象
需要实现的过滤逻辑:
- 先从
data中筛选出category值和入参完全匹配的分类项 - 在匹配到的分类项的
tabs数组中,定位header值和入参完全匹配的标签条目 - 返回该条目在
tabs数组中的索引值,示例场景下匹配"Lamb chops"的预期输出为1
可直接运行的实现代码(JavaScript)
function getTargetTabIndex(data, categoryVal, headerVal) { // 匹配目标分类 const targetCategoryItem = data.find(item => item.category === categoryVal); if (!targetCategoryItem) return -1; // 返回对应tab的索引 return targetCategoryItem.tabs.findIndex(tab => tab.header === headerVal); } // 测试样例 const testData = [ { category: "Chinese Food", tabs: [{header: "Yuxiang Shredded Pork"}, {header: "Braised Pork"}] }, { category: "Western Food", tabs: [{header: "Steak"}, {header: "Lamb chops"}, {header: "Cream of Mushroom Soup"}] } ]; // 调用测试 console.log(getTargetTabIndex(testData, "Western Food", "Lamb chops")); // 输出结果1,符合预期
实现说明
- 分类匹配用
Array.find方法,遍历到符合条件的项就会终止,比全量过滤的性能更高 - 索引查找直接用原生
Array.findIndex方法,不需要手动写循环计数,代码更简洁 - 加了边界兼容:如果没找到对应分类、或者分类下没有对应header的标签,统一返回
-1,避免代码抛出异常
内容的提问来源于stack exchange,提问作者Derek Hough
相关产品推荐
相关产品推荐

