如何用JavaScript遍历JSON对象,返回所有匹配条件的索引数组?
获取所有匹配元素的索引数组
你当前的代码使用findIndex只能返回第一个匹配元素的索引,无法收集所有符合条件的索引。要实现匹配id为18A38时返回[1,3]这样的结果,可以参考以下两种方案:
单ID匹配场景
如果只需要匹配单个id,直接遍历数组收集索引即可:
const checkId = '18A38'; const indices = []; dataOject.forEach((item, index) => { if (item.id === checkId) { indices.push(index); } }); console.log(indices); // 输出 [1, 3]
多ID匹配+高效查询场景
如果需要处理checkArray中的多个id,且数据量较大(数百条),建议先构建id到索引数组的映射表,后续查询无需重复遍历原数组:
// 构建id与对应索引数组的映射 const idIndexMap = dataOject.reduce((map, item, index) => { // 若当前id未在映射中,初始化空数组 if (!map[item.id]) { map[item.id] = []; } map[item.id].push(index); return map; }, {}); // 根据checkArray获取对应索引数组 const result = checkArray.map(id => idIndexMap[id] || []); console.log(JSON.stringify(result)); // 输出 [[1,3]]
方案说明
- 原代码的
findIndex方法在找到第一个匹配项后就会终止遍历,因此只能拿到首个索引; - 上述方案通过遍历整个数组(或一次遍历构建映射),收集所有符合条件的索引,满足需求;
- 映射表方案仅需遍历原数组一次,后续查询效率为O(1),更适合数据量较大的场景。
内容的提问来源于stack exchange,提问作者London28
相关产品推荐
相关产品推荐

