JavaScript中使用.filter()筛选矩阵全正整数行的问题求助
解决矩阵中筛选全正整数行的问题
嘿,别担心,刚接触二维数组的filter()确实容易卡壳,我刚学JS的时候也在这里绕了半天~咱们一步步来理清楚:
首先先提个小细节:你现在的单数组处理代码里,函数名是positiveRowsOnly,但返回的是ind < 0的元素(也就是负数),这应该是笔误啦,正确筛选正整数的话应该改成return Number.isInteger(ind) && ind > 0——毕竟你要的是正整数,不只是正数,对吧?
回到矩阵的问题:矩阵其实就是「数组的数组」,所以我们需要两层判断:
- 外层用
filter()遍历矩阵的每一行,筛选出符合条件的行 - 对每一行,需要检查所有元素都是正整数,这里就要用到
every()方法——它会验证数组里的每一个元素都满足条件,只有全部满足才返回true
给你写个完整的示例代码:
function positiveRowsOnly(matrix) { // 外层filter:遍历矩阵的每一行,筛选合格的行 return matrix.filter(row => { // 内层every:检查当前行的所有元素是否都是正整数 return row.every(num => { return Number.isInteger(num) && num > 0; }); }); } // 测试一下效果 console.log(positiveRowsOnly([ [1, 10, 2], // 全正整数,保留 [-100, 2, -20], // 有负数,排除 [200, 3, 30], // 全正整数,保留 [300, 5.5, 10] // 有小数,排除 ])); // 输出结果:[[1, 10, 2], [200, 3, 30]]
简单解释下逻辑:
- 外层
matrix.filter(row => ...)会把矩阵里的每一行拿出来检查 - 对每一行
row,调用row.every(...)——只要有一个元素不是正整数,every()就返回false,这一行就会被过滤掉;只有所有元素都符合条件,every()返回true,这一行才会被保留到结果数组里
这样是不是就清晰多啦?如果还有疑问随时问~
内容的提问来源于stack exchange,提问作者user2762414
相关产品推荐
相关产品推荐

