NodeJS中使用filter筛选rating为5的JSON数组元素的问题排查
帮你搞定这个
filter的问题~ 嘿,你的代码里有两个关键问题导致它没法正常工作,我来给你拆解一下:
问题1:判断条件找错了对象
你写的if(proct === 5)里,proct是数组里的每个产品对象(比如{name: "product 1", rating:5}),它怎么可能等于数字5呢?你要判断的是这个对象里的rating字段,所以得写成proct.rating === 5才行。
问题2:没搞懂filter的正确用法
filter方法的核心作用是帮你生成一个符合条件的新数组,它需要你的回调函数返回一个布尔值(true/false),来决定当前元素要不要留在新数组里。你之前的回调里既没返回判断结果,还直接在里面打印,完全搞错了它的用法哦。
修复后的代码
我给你改好了,逻辑更清晰,也能正常运行:
let products = [ { "name" : "product 1", "rating" : 5 }, { "name" : "product 2", "rating" : 4 }, { "name" : "product 3", "rating" : 5 }, { "name" : "product 4", "rating" : 2 } ]; const getFiveStarProducts = (products) => { // 第一步:用filter筛选出rating为5的产品,得到新数组 const fiveStarItems = products.filter(proct => proct.rating === 5); // 第二步:遍历筛选后的数组,打印每个产品的名字 fiveStarItems.forEach(item => console.log(item.name)); // 如果之后需要用这个筛选后的数组,直接return fiveStarItems就行 }; getFiveStarProducts(products);
如果你想写得更简洁,也可以把两步合并成链式调用:
const getFiveStarProducts = (products) => { products .filter(proct => proct.rating === 5) .forEach(item => console.log(item.name)); };
小补充
filter本身不会修改原数组,只会返回一个新的符合条件的数组。所以一定要记得接收它的返回值,或者像上面那样链式调用后续的操作~
内容的提问来源于stack exchange,提问作者Digvijay Singh Thakur
相关产品推荐
相关产品推荐

