获取JSON对象的值

时间:2013-10-13 02:35:49

标签: javascript jquery arrays json

我正在尝试查看JSON对象中是否存在值,如果存在,则该值应放在DOM中。

在我的示例中,我在访问与数组arr中的“value”名称配对的值时遇到问题。

在最终结果中,我希望用户在文本框中键入文本,当他们选择一个选项并且选项框关闭时,该值应该放在已放置的div中。在放置值之前,它必须检查数组中是否存在该值,因此不会将gibberish放置在已放置的元素中。

    var arr = [ 
        {value : "c++", price: "5.69"},
        {value : "php", price: "5.69"},
        {value : "coldfusion", price: "5.69"},
        {value : "javascript", price: "5.69"},
        {value : "asp", price: "5.69"},
        {value : "ruby", price: "5.69"},
     ];
     // alert(arr.value)
$( "#autocomplete" ).autocomplete({

    source  : arr,
  close : function(event, ui){
    var val = $('input#autocomplete').val();
     //Definite problem[index needed?]
    if ($.inArray(val,arr.value) > -1) {
       $('.placed').html(val);
    }

  }
});

我刚开始学习JSON,我不确定是否检查这种类型的数组中是否存在val。所以,如果你能帮助我那将是伟大的。

jsfiddle

1 个答案:

答案 0 :(得分:0)

您可以在普通数组上使用$.inArray,但这里有一个对象数组。因此,请尝试使用$.grep获取所有匹配项。

 close: function (event, ui) {
            var val = $('input#autocomplete').val();
            var res = $.grep(arr, function (o) { //Will give you all the matches
                  return o.value.indexOf(val) > -1;
            });

            if (res.length) {
                $('.placed').html(val);
            }

        }
    });

Demo

但似乎你只是想看看匹配是否存在,所以在这种情况下只使用$.each

    close: function (event, ui) {
        var val = $('input#autocomplete').val();
        var match = false;
        $.each(arr, function (_, o) {
            if (o.value === val) {
                match = true;
                return false; //break the look once you find a match
            }
        });
        if (match) {
            $('.placed').html(val);
        }

<强> Demo