已提取JSON格式数据,如何添加指定过滤条件实现数据筛选?
解决方法
你当前写的temp.filter()用法不对——代码里的temp是单条数据的数组(对应一行记录),而filter是用来过滤多条数据组成的数组的方法,直接用在单条数据数组上起不到筛选整行的作用。
正确的做法有两种,选一种适合你的场景:
方案一:处理单条数据时直接过滤
在将temp推入toPrint数组之前,添加判断条件:只有当temp的第25个元素(索引24)等于1时,才把这条数据加入toPrint。
修改后的完整代码:
// 7. for each itemid, extract the metrics required (the list of metrics in section 2) // outdata.forEach(function (outJson) { var temp = [] for (var j = 0; j < head.length; j++) { temp.push((outJson[head[j]]) ? outJson[head[j]] : "" ) // ? : works like an if statement (condition ? value if true : value if false) // } if(temp.length>=34){ temp.pop() // remove the last empty column } temp.push(counter) // 新增过滤条件:仅当temp[24]等于1时,才将该行加入结果数组 if (temp[24] == 1) { toPrint.push(temp) } counter++ }) }
方案二:所有数据处理完后统一过滤
如果想在全部数据提取完成后,一次性对结果数组toPrint进行筛选,可以在整个forEach循环结束后执行过滤:
// 原有的数据提取代码保持不变 outdata.forEach(function (outJson) { var temp = [] for (var j = 0; j < head.length; j++) { temp.push((outJson[head[j]]) ? outJson[head[j]] : "" ) } if(temp.length>=34){ temp.pop() } temp.push(counter) toPrint.push(temp) counter++ }) // 循环结束后统一过滤符合条件的行 toPrint = toPrint.filter(function(row) { return row[24] == 1 }) }
内容的提问来源于stack exchange,提问作者Kreng Kongkeng
相关产品推荐
相关产品推荐

