确定数组是否包含偶数
Determining if an array contains an even number
我是javascript的新手,正在尝试了解这种语言。这是我写的一个函数,如果数组包含偶数,它应该返回true,如果不包含偶数,则返回false。
var containsEvenNums = function(numArray) {
numArray.forEach(function(element) {
if(element % 2 == 0) {
return true;
}
});
return false;
};
var main = function() {
var nums = [1,2,3,4];
console.log("This array contains even number(s): " + containsEvenNums(nums));
};
我知道这与AJAX和回调函数有关,但由于我是该语言的新手,你能解释一下为什么我的代码返回"未定义"吗?
您不会在任何地方保存数组中存在偶数的事实。
你可以这样做
var containsEvenNums = function(numArray) {
var containsEvenNum = false;
numArray.forEach(function(element) {
if(element % 2 == 0) {
containsEvenNum = true;
}
});
return containsEvenNum;
};
但这种方法有一个缺点:它需要遍历整个数组(不能破坏)。
我建议使用Array.prototype.some
var containsEvenNums = function(numArray) {
return numArray.some(function(element) {
return element % 2 === 0;
});
};
main()
方法返回错误值,因为在forEach
内部,它检查数组的每个值,然后运行最终语句return false
。循环在第一次匹配时没有停止。
如果您使用了普通的for
循环,它会很好地工作。
您可以在函数中使用var flag = false;
。在forEach循环中,如果存在偶数,则设置标志。返回该标志。
否则我更喜欢:
var containsEvenNums = function(numArray) {
return numArray.some(function(value) {
return value % 2 ==0;
});
}
我知道这与AJAX和回调函数有关
不,没有;AJAX通常是描述使用XMLHttpRequest进行异步调用的模式。
你的问题可能更多地与函数编程有关,在函数编程中你有一类函数。
在您的特定情况下,您有两个匿名函数:第一个分配给containsEvenNums
,第二个作为forEach
的参数。您的return
语句在其中,因此containsEvenNums
没有return
语句,因此它总是返回undefined
。此外,这里不建议使用forEach,因为无论如何都要迭代数组的所有项,所以如果您的场景知道数组是否至少包含一个偶数,则是次优的。
如果你找到一个偶数,你肯定可以设置一个变量:
var containsEvenNums = function(numArray) {
var containsEven = false;
numArray.forEach(function(element) {
if(element % 2 == 0) {
containsEven = true;
}
});
return containsEven;
};
但正如所说,这是次优的。你可能一找到偶数就想停下来,所以可能有些就是你想要的:
function isEven(number) {
return number % 2 === 0;
}
function containsEvenNums(numArray) {
return numArray.some(isEven);
}
正如你所看到的,功能性更强的方法的优点是你有更多的泛型谓词函数。在这种情况下,isEven
可以用作独立函数,用于单个值:
if (isEven(userInput)) { ... }
或者对于其他Array的方法:
// every item of the array has to be even
var result = numArray.every(isEven)
或者用于构图。
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 此行是否包含函数声明
- 查找对象数组是否包含其中一个标记的最快方法
- 如何使用JQuery检查输入(电子邮件)字段是否包含特殊字符
- 是否在Script Src标记中包含Script<脚本>(JavaScript等)
- 是否可以在JavaScript中包含HTML代码
- 检查数组是否包含
- jQuery事件命名空间是否可以包含破折号
- 在添加或删除之前,正在使用检查classList是否包含类
- 确定数组是否包含偶数
- 如何检查 iframe 中的锚标记是否包含 URL
- 检查选择器在jQuery中是否包含文本(即不是媒体)
- 我是否应该在网站的每个页面上都包含 Google 地图脚本标签
- 如何检查数据表是否有任何包含字符串的行并获取它的行索引
- 在 html 文件中包含无缓存元标记是否也会阻止缓存该 html 文件中链接的 js 和 css 文件
- 检查字符串是否包含计算
- 使用 javascript 检查元素是否包含子标记而不是文本
- 使用 Chai - 如何检查对象属性是否包含 DOM 元素
- 这些JavaScript包含定义是否有区别
- 在ParseInstallation对象中包含用户名是否不合适?