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