$.each()遍历遇到的坑

来源:互联网 发布:sqlserver 升级 编辑:程序博客网 时间:2024/06/11 03:53

今天写了个利用$.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

原创粉丝点击