JS加载JSON生成二维对象按ortho筛选返回空数组如何解决
错误原因
Object.entries()误用,做了多余的结构转换
你可以通过dict[1]直接取到行数据对象,说明dict本身就是存储所有行的数组结构。Object.entries(dict)会把数组转成[[索引, 行对象], [索引, 行对象]...]的二元组数组,此时遍历拿到的word是[索引, 行对象]的数组,自然不存在ortho属性,筛选判断永远为false,返回空数组。- 异步请求时序错误
$.getJSON是异步网络请求,如果你把筛选逻辑写在请求回调的外部,执行筛选代码时请求还没完成,dict还没被赋值,也会导致筛选结果为空。
解决方法
直接去掉多余的Object.entries转换,并且把筛选逻辑放到请求回调内部,保证数据加载完成后再执行筛选即可,代码示例如下:
$.getJSON("file.json", function(arr) { const dict = arr; // 直接对数组做筛选即可 const result = dict.filter(word => word.ortho === 'a'); console.log(result); });
如果你的dict确实是外层为对象、值才是行数据的结构,调整筛选逻辑取二元组的第二项判断即可:
$.getJSON("file.json", function(arr) { const dict = arr; const asArray = Object.entries(dict); // 取二元组第二项为行对象做判断,最终返回所有匹配的行对象 const result = asArray.filter(([key, word]) => word.ortho === 'a').map(item => item[1]); console.log(result); });
内容的提问来源于stack exchange,提问作者PythonicRitual
相关产品推荐
相关产品推荐

