今天写了个利用$.each()循环遍历json对象数组,判断是否含有指定value的函数,期间遇到了点返回值问题,特此记录。
首先生成一个用于测试的json数组
var jsonData = [{
"name": "mike",
"age": 24
},
{
"name": "andy",
"age": 20
},
{
"name": "John",
"age": 17
}
]
接下来写一个函数,来判断json数组中是否含有“John“
function ifHasJohn(data) {
$.each(data, function(index, el) {
if (el["name"] == "John") {
console.log(el["name"] == "John");//这一行在控制台输出总会是true
return true;
}
});
return false;
}
接下来alert打印函数的返回值
alert(ifHasJohn(jsonData));
结果发现返回的结果总是false,明明John就出现在了数组中,而且函数中的console.log总会在控制打印true
查了一下,原因如下:
jquery跳出当前的each循环,使用如下方式:
return false;——跳出所有循环;相当于 javascript 中的 break 效果。
return true;——跳出当前循环,进入下一个循环;相当于 javascript 中的 continue 效果
因此,正确的函数写法应该是
function ifHasJohn(data) {
var flag=false;//设置是否存在的标识符
$.each(data, function(index, el) {
if (el["name"] == "John") {
flag=true;
return false;//退出所有循环
}
});
return flag;
}
这样就会得到正确的返回结果:true