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