Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS回调函数问题?_Javascript_Arrays_Foreach_Callback - Fatal编程技术网

Javascript JS回调函数问题?

Javascript JS回调函数问题?,javascript,arrays,foreach,callback,Javascript,Arrays,Foreach,Callback,我试图创建一个函数,它接受数组和回调函数。如果传递给回调函数的数组中的所有值都返回true,则函数应返回true,否则返回false。但我不确定我做错了什么 const every = function(arr, callback) { arr.forEach(function(element) { if(!callback(element)) { return false } })

我试图创建一个函数,它接受数组和回调函数。如果传递给回调函数的数组中的所有值都返回true,则函数应返回true,否则返回false。但我不确定我做错了什么

const every = function(arr, callback) {
   arr.forEach(function(element) {     
     if(!callback(element)) {       
       return false         
     }       
   })      
   return true  
};  

every([1, 2, 3, 4, 5], function(val) {
    return val < 2
});
const every=函数(arr,回调){
arr.forEach(函数(元素){
如果(!回调(元素)){
返回错误
}       
})      
返回真值
};  
every([1,2,3,4,5],函数(val){
返回值<2
});
预期结果=>false
但我正在变为现实

您可能会为此使用reduce()。如果您根据回调的事实和结果进行缩减,那么只要回调为真,它就会保持为真。一旦回调为false,条件中的
真值检查将使逻辑短路,回调将不再执行。但它将在所有元素中循环

对于空数组,它也会返回true,这似乎符合您的原始逻辑意图

const every=函数(arr,回调){
返回arr.reduce(函数(真值,元素){
返回真相&回调(元素);
},对);
};  
console.log(
every([1,2,3,4,5],函数(val){return val<2})
);
console.log(
every([],函数(val){return val<2})

);您可能会为此使用reduce()。如果您根据回调的事实和结果进行缩减,那么只要回调为真,它就会保持为真。一旦回调为false,条件中的
真值检查将使逻辑短路,回调将不再执行。但它将在所有元素中循环

对于空数组,它也会返回true,这似乎符合您的原始逻辑意图

const every=函数(arr,回调){
返回arr.reduce(函数(真值,元素){
返回真相&回调(元素);
},对);
};  
console.log(
every([1,2,3,4,5],函数(val){return val<2})
);
console.log(
every([],函数(val){return val<2})

);
forEach
回调返回
false
,也不会导致
每个
函数返回。相反,它将继续使用
forEach
迭代器

问题的最简单解决方案是循环,因为它允许您使用类似于代码片段的
返回模式:

const every=函数(arr,回调){
for(arr的常量元素){
if(!回调(元素)){
返回false;
}
}
返回true;
};
log(每([1,2,3,4,5],函数(val){
返回val<2;

}));
forEach
回调返回
false
,也不会导致
每个
函数返回。相反,它将继续使用
forEach
迭代器

问题的最简单解决方案是循环,因为它允许您使用类似于代码片段的
返回模式:

const every=函数(arr,回调){
for(arr的常量元素){
if(!回调(元素)){
返回false;
}
}
返回true;
};
log(每([1,2,3,4,5],函数(val){
返回val<2;
}));
内部函数返回false,这对外部函数没有影响(在这种情况下)
您应该在外部函数中创建一个新变量,而不是在内部函数中返回false,而是更改该变量
最后,只需返回变量

const every = function(arr, callback) {
    let isEvery = true
    arr.forEach(function(element) {     
        if(!callback(element)) { // or just isEvery = isEvery && statement
            isEvery = false
         }       
     })      
    return isEvery
};  
内部函数返回false,这对外部函数没有影响(在这种情况下) 您应该在外部函数中创建一个新变量,而不是在内部函数中返回false,而是更改该变量 最后,只需返回变量

const every = function(arr, callback) {
    let isEvery = true
    arr.forEach(function(element) {     
        if(!callback(element)) { // or just isEvery = isEvery && statement
            isEvery = false
         }       
     })      
    return isEvery
};  

我建议使用一个简单的for循环:

    const every = (arr, callback) => {
       for (let i = 0; i < arr.length; i++){
          if (callback(arr[i]) === false){
             return false;
       }
    }
       return true;
    };  

    console.log(every([1, 2, 3, 4, 5], function(val){return val < 2}));
const every=(arr,callback)=>{
for(设i=0;i
我建议使用一个简单的for循环:

    const every = (arr, callback) => {
       for (let i = 0; i < arr.length; i++){
          if (callback(arr[i]) === false){
             return false;
       }
    }
       return true;
    };  

    console.log(every([1, 2, 3, 4, 5], function(val){return val < 2}));
const every=(arr,callback)=>{
for(设i=0;i
forEach方法回调中的返回在调用该方法的函数中完全不起作用。我建议过滤数组并测试结果长度。或者,较新版本的JavaScript实际上在数组上有一个each方法:它只是我还是回调以错误的语法传递?最后的
{}
看起来很奇怪
数组。prototype
有一个
each
可以做你想要的,例如
[1,2,3,4,5]。each(val=>val<2)
@ic3b3rg他显然是在试图了解如何自己实现类似的函数。@Barmar不太确定他是否知道
Array.prototype。每次
forEach方法回调中的返回都不会对调用该方法的函数产生任何影响。我建议过滤数组并测试结果长度。或者,较新版本的JavaScript实际上在数组上有一个each方法:它只是我还是回调以错误的语法传递?最后的
{}
看起来很奇怪
数组。prototype
有一个
each
可以做你想要的,例如
[1,2,3,4,5]。each(val=>val<2)
@ic3b3rg他显然在试图了解如何自己实现类似的功能。@Barmar不太确定他是否知道
Array.prototype.each
尽管正如@ic3b3rg指出的那样,Array.prototype.each存在,并且似乎存在