JavaScript中Array.filter()返回undefined而非过滤数组的原因排查
为什么你的
driversWithRevenueOver函数返回undefined? 嘿,我来帮你捋清楚这段代码为什么返回undefined——主要是两个容易忽略的小细节:
1. 最关键的问题:没有返回filter的结果
Array.filter()方法本身会返回一个包含所有符合条件元素的新数组,但你的外层函数driversWithRevenueOver里,只是调用了driver.filter(...),却没有把这个新数组通过return语句返回出去。JavaScript里如果函数没有明确的返回值,默认就会返回undefined,这就是你遇到的核心问题。
2. (非直接原因,但建议修正)filter回调的返回值不规范
虽然这个点不会导致返回undefined,但属于最佳实践问题:filter的回调函数应该返回一个布尔值(true/false),用来判断当前元素是否应该被保留在新数组里。你现在返回的是person对象,因为对象在JavaScript里属于“真值”,所以也能间接达到筛选效果,但更清晰、更符合规范的写法是直接返回判断条件:
return person.revenue >= revenue;
修正后的完整代码
function driversWithRevenueOver(driver, revenue) { // 必须return filter生成的新数组 return driver.filter(function(person) { // 直接返回布尔判断,代码更易读 return person.revenue >= revenue; }); } // 调用测试 driversWithRevenueOver( [ { name: "Sally", revenue: 400 }, { name: "Annette", revenue: 200 }, { name: "Jim", revenue: 150 }, { name: "Sally", revenue: 200 } ], 250 ); // 现在会正确返回 [{ name: 'Sally', revenue: 400 }]
内容的提问来源于stack exchange,提问作者jaytix
相关产品推荐
相关产品推荐

