我有以下代码段。
$scope.functionName = function(id) {
var flag = true;
var numbers = [1, 3, 30];
for (var i = 0; i < numbers.length; i++) {
if (id == numbers[i]) {
flag = false;
} else {
flag = true;
}
}
if (flag == true) {
console.log("this is true");
}
if (flag == false) {
console.log("this is true");
}
}
我要执行的是,如果输入值在数组中,则flag
的值应为false
,否则为true
。但是,在此代码段中,尽管在此之后流程进入了for循环,但它并未进入任何if条件。进入for循环后,它直接输出“ this is true”。 flag
始终是真实的。
答案 0 :(得分:2)
这是您要达到的目标的一种更清洁的方法
checkIfNumberIsInArray = function(number, arr) {
return arr.includes(number)
}
console.log(checkIfNumberIsInArray(1, [1,2,3,4,5])) // true
console.log(checkIfNumberIsInArray(6, [1,2,3,4,5])) // false
答案 1 :(得分:0)
当您的值等于数组中的值时,添加一个break语句。
$scope.functionName = function(id) {
var flag = true;
var numbers = [1, 3, 30];
for (var i = 0; i < numbers.length; i++) {
if (id == numbers[i]) {
flag = false;
break;
}
}
if (flag == true) {
console.log("this is true");
}
if (flag == false) {
console.log("this is false");
}
}
答案 2 :(得分:-1)
您不需要循环数组,只需使用indexOf。另外,请尝试将数字类型用于数字,将布尔类型用于布尔值,这两者都使用字符串
$scope.functionName = function(id)
{
var numbers = [1, 3, 30];
var flag = numbers.indexOf(parseInt(id, 10)) > -1; // Convert to number just in case
if(flag === true)
{
console.log("this is true");
}
if(flag === false)
{
console.log("this is true");
}
}