如何获取判断数值是否小于10的布尔数组?
问题:如何判断数组中每个元素是否小于10,并返回布尔数组?
嗨呀,完全不用不好意思~初学者踩这种小坑太正常啦!我来帮你捋清楚问题出在哪,以及怎么得到你想要的结果。
首先先看你写的代码:
function underTen (arr){ let underTenAnswer = arr.forEach(function(n){ if (n < 10) { true; } else { false; } }) }
这里有两个关键问题:
forEach方法的作用只是遍历数组执行回调函数,它本身不会返回任何值(准确说是返回undefined),所以你把它的结果赋值给underTenAnswer,最后得到的只会是undefined- 你的回调函数里写了
true和false,但既没有把它们返回,也没有把它们存到某个地方,相当于白写啦
那怎么改呢?其实你一开始想到的map方法才是最适合这个场景的!map的核心作用就是遍历数组,对每个元素执行回调,然后把回调的返回值收集起来组成一个新数组返回,完美匹配你的需求。
方法1:用map实现(最简洁推荐)
function underTen(arr) { return arr.map(function(n) { return n < 10; // 直接返回判断结果,不用if-else也能搞定哦 }); }
如果想更简洁,还可以用ES6的箭头函数:
const underTen = arr => arr.map(n => n < 10);
方法2:如果非要用forEach,可以手动收集结果
要是你想试试用forEach实现,那需要自己创建一个数组来存判断结果:
function underTen(arr) { let underTenAnswer = []; // 先初始化一个空数组 arr.forEach(function(n) { underTenAnswer.push(n < 10); // 把每个元素的判断结果推到数组里 }); return underTenAnswer; // 最后返回这个结果数组 }
现在测试一下:
输入underTen([1,9,12,19,4,16]),就能得到你想要的[true, true, false, false, true, false]啦!
最后给你总结几个小知识点:
- 当需要基于原数组生成新数组时,优先用
map,它就是专门干这个的 forEach更适合做不需要返回值的遍历操作,比如打印元素、修改原数组里的内容- 简单的布尔判断可以省略
if-else,直接返回判断表达式的结果,代码会更简洁
内容的提问来源于stack exchange,提问作者Nathan Lima
相关产品推荐
相关产品推荐

