使用jQuery $ .inArray验证JSON中是否存在值

时间:2014-09-16 00:35:55

标签: javascript jquery json html5

所有

我正在尝试使用jQuery' $ .inArray方法验证JSON数组中是否存在特定值。

目前,JS脚本上方有一个表单字段,用于接收用户输入,并在输入或单击“提交”时,'应该根据JSON验证输入。代码如下:

<form>
      <label for="zipcode">Enter your zipcode</label>
      <input type="text" id="zipcode" name="zipcode"> </br>
      <input id="user_info" type="submit">
</form>
<p></p>

...

$('document').ready(function(){
 $('#user_info').on("click", function(e){
  e.preventDefault();
  var zipcode = $('form').find('input[name="zipcode"]').val();
  if($.inArray(zipcode, theCodes)!==-1) {
    $("p").text("You got it!");
  } else {
    $("p").text("You don't got it!");
  }
 }); //closes click handler
}); //closes document.ready

var theCodes = [{"ZIPCode":20001,"Market":"Washington DC"},
                          {"ZIPCode":20004,"Market":"Washington DC"},
                          {"ZIPCode":20005,"Market":"Washington DC"},
                          {"ZIPCode":20006,"Market":"Washington DC"},
                          {"ZIPCode":20007,"Market":"Washington DC"},
                          {"ZIPCode":20008,"Market":"Washington DC"},
                          {"ZIPCode":20009,"Market":"Washington DC"},
                          {"ZIPCode":20012,"Market":"Washington DC"}]

正如您所看到的,我们的想法是,如果用户输入的值与JSON数组中的值匹配,则应返回0或更高并触发&#34;您已获得它!&#34;附加到

元素。但是,目前它触发了#34;你没有得到它!&#34;

我已经使用console.log来查看是否删除了zipcode变量,但是这似乎不是问题。

任何想法如何进行?

3 个答案:

答案 0 :(得分:1)

这是深夜,我知道这段代码并不好;但它做你所要求的!但是,我没有使用$.InArray(),因为它不适用于我可以说...

$('#user_info').on('click', function(){
    var IsInArr = function(needle, haystack){
        for (var i = 0; i < haystack.length; i++) {
            if (haystack[i].ZIPCode == needle) {
                return true;
            }
        }
        return false;
    };
    if (IsInArr($('#zipcode').val(), theCodes)) {
        $('p').text('You got it');
    } else {
        $('p').text('You don\'t got it');
    }
});

DEMO: http://jsfiddle.net/j476sruj/

答案 1 :(得分:1)

您正在尝试将字符串值与对象数组进行比较。这不能仅仅因为它们甚至不是同一类型,更不用说匹配值了。

您需要检查数组中每个ZIPCode的{​​{1}}值。

jQuery中的一个方便的实用函数是object,它将根据条件过滤数组并返回一个新数组。如果新过滤的数组没有长度则没有匹配,否则就有。

$.grep()

$.grep() API Docs

答案 2 :(得分:0)

  

var theCodes = [{“ZIPCode”:20001,“Market”:“Washington DC”},                                     {“ZIPCode”:20004,“市场”:“华盛顿特区”},                                     {“ZIPCode”:20005,“市场”:“华盛顿特区”},                                     {“ZIPCode”:20006,“市场”:“华盛顿特区”},                                     {“ZIPCode”:20007,“市场”:“华盛顿特区”},                                     {“ZIPCode”:20008,“市场”:“华盛顿特区”},                                     {“ZIPCode”:20009,“市场”:“华盛顿特区”},                                     {“ZIPCode”:20012,“市场”:“华盛顿特区”}}

    console.log($.inArray('{"ZIPCode":20001,"Market":"Washington DC"}', theCodes));
    // output -1

就像'var zipcode = $('form')。find('input [name =“zipcode”]')。val();'获取输入,但值的类型是字符串,因此$ .inArray始终输出-1