数组中正数组的返回



我创建了这段代码来查找所有正整数的数组,但我不明白为什么它只返回找到的第一个数组,而不在普通数组中累加数组。

const input = [[1, 10, -100], [2, 20, 200], [3, 30, 300]];
function positiveRowsOnly(array) {

let num = 0;

return array.filter(el=>{

for(let i=0;i<=el.length;i++){

if(el[i]>0){
num++;
}    
}

if(el.length==num){
return el;
}

num = 0; 
})
}
console.log(positiveRowsOnly(input));

filter方法用满足条件的元素创建一个新数组,就像我在另一个简单代码中所做的那样,它返回所有偶数,并在数组中累积返回的结果。

const input = [10, 15, 20, 25, 30, 35];
function onlyEven(array) {

return array.filter(num =>{
if(num%2==0){
return num;
}
})
}
onlyEven(input);

您实际上可以简化代码-只需将嵌套数组上的.filter.every组合起来,即可过滤掉那些包含负数的数组:

const input = [[1, 10, -100], [2, 20, 200], [3, 30, 300]];
function positiveRowsOnly(array) {

return array.filter(subArr =>{    
return subArr.every(el => el > 0);
});
}
console.log(positiveRowsOnly(input));

您需要在过滤器内分配num=0。这是工作代码。

const input = [[1, 10, -100], [2, 20, 200], [3, 30, 300]];
function positiveRowsOnly(array) {

return array.filter(el=>{
let num = 0;
for(let i=0;i<=el.length;i++){

if(el[i]>0){
num++;
}    
}

if(el.length==num){
return el;
}
})
}
console.log(positiveRowsOnly(input));

之所以会发生这种情况,是因为您在filter函数之外声明了num,所以它每次都会递增,而这个条件是:

if(el.length==num){
return el;
}

永远不会奏效。要修复它,只需在filter函数中移动let num = 0解密,如下所示:

const input = [[1, 10, -100], [2, 20, 200], [3, 30, 300]];

function positiveRowsOnly(array) {  
return array.filter(el=>{
let num = 0;

for(let i=0;i<=el.length;i++){

if(el[i]>0){
num++;
}    
}

if(el.length==num){
return el;
}

num = 0; 

})
}
console.log(positiveRowsOnly(input));

问题是在哪里设置num=0。

返回时,不会将num设置为0。

在返回之前尝试将num=0设置为:

const input = [[1, 10, -100], [2, 20, 200], [3, 30, 300]];
function positiveRowsOnly(array) {

let num = 0;

return array.filter(el=>{

for(let i=0;i<=el.length;i++){

if(el[i]>0){
num++;
}    
}

if(el.length==num){
num = 0; // here!
return el;
}

num = 0; 
})
}
console.log(positiveRowsOnly(input));

相关内容

  • 没有找到相关文章

最新更新