Javascript JS回调函数问题?
我试图创建一个函数,它接受数组和回调函数。如果传递给回调函数的数组中的所有值都返回true,则函数应返回true,否则返回false。但我不确定我做错了什么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 } })
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存在,并且似乎存在