多次过滤数组时控制台显示[Array(0)]的问题求助
问题分析与解决方案
核心问题
第一个循环中,你通过result.push(productData.filter(...))将每个Case过滤得到的数组作为元素存入result,导致result变成了二维数组(结构类似[[符合Case1的数组], [符合Case2的数组]])。
第二个循环里,你尝试用result.filter(x => x.mcs === 0)过滤时,x是result中的子数组,而非单个数据对象——子数组本身没有mcs属性,所以过滤结果为空,最终错误地将空数组push进result,导致后续数据异常。
修正后的代码
async function testFunction(arrayRange, arrayTheta, url, graphLabels, mcsArray, channelArray, caseArray, caseData) { // 获取JSON数据 const response = await fetch(url); const productData = await response.json(); // 第一步:收集所有符合Case条件的单个数据对象,形成一维数组 let result = []; for (const caseItem of caseArray) { console.log(`${caseItem} / checked`); // 用concat合并过滤后的数组,避免result变成二维 result = result.concat(productData.filter(x => x.Case === caseItem)); } console.log("Case过滤后的结果:", result); // 第二步:过滤符合mcs条件的数据 if (mcsArray.length > 0) { // 过滤出mcs值在mcsArray中的数据 result = result.filter(x => mcsArray.includes(x.mcs)); console.log("MCS过滤后的结果:", result); } return result; }
关键优化点
- Case过滤阶段:用
concat替代push,将多个过滤后的数组合并为一维数组,确保result中存储的是单个数据对象,而非子数组。 - MCS过滤阶段:直接用
includes判断数据的mcs是否在目标数组中,一次完成多值过滤,避免循环中重复push错误结果。 - 简化了冗余的if判断,用
for...of遍历数组更简洁。
内容的提问来源于stack exchange,提问作者Abinesh.co
相关产品推荐
相关产品推荐

