从数组创建JSON对象

时间:2012-07-03 23:06:06

标签: javascript jquery json

我有一个输入字段#tag_field,我的用户在其中输入一个标记,然后我想检查JSON对象中是否存在指定的值。

下面是我正在使用的代码但不确定如何将用户输入传递给blur()事件中的函数。

var tags = [
                    {
                        "tag": "php",
                        "id": "x&8j"
                    },
                    {
                        "tag": "ruby",
                        "id": "x&8jX90"
                    }
];

$j('#tag_field').blur(function(){
        var tagMap = {};
        var i = null;
        for (i = 0; tags.length > i; i += 1) {
            tagMap[tags[i].tagName] = tags[i];
        }

        var hasTag = function(tagName) {
            return tagMap[tagName];
        };
    });

3 个答案:

答案 0 :(得分:1)

你的意思是like this

您是否只需要获取输入的值并将其与标记对象中的名称进行比较?

$('#tag_field').blur(function() {
    var tagMap = {};
    var i = null;
    for (i = 0; tags.length > i; i += 1) {

        if (tags[i].tag == $(this).val()) alert('exist' + tags[i].id)
        //Check
    }

    var hasTag = function(tagName) {
        return tagMap[tagName];
    };
});​

答案 1 :(得分:1)

var tags = [
    {
        "tag": "php",
        "id": "x&8j"
    },
    {
       "tag": "ruby",
       "id": "x&8jX90"
    }
]

$(function() { 
    $('#tag_field').on('blur', function(e) {
        var $this = $(this), val = $.trim($this.val());
        if (!val) return false;

        for(var i=0, l=tags.length;i<l;i++) {
            if (tags[i]['tag'] === val) {
                console.log('tag exists')
                return tags[i]['tag'];
            }
        }
        console.log('tag does not exist');
        return false;
    })
})

简化标签地图(如果可能)将使其更容易

var tags =  { "php" : "x&8j", "ruby" : "x&8jX90" }

$(function() { 
    $('#tag_field').on('blur', function(e) {
      if(tags[$.trim($(this).val())]) {
          console.log('tag exists')
      } else {
          console.log('tag does not exist')
      }
    })
})
​

答案 2 :(得分:-1)

如果可用,您最好使用Array.some

function tagExists(needle, haystack) {
  if (Array.prototype.some) {
    return haystack.some(function(element) {
      return element.tag == needle
    });
  } else {
    for(i in haystack) {
      if(typeof(haystack[i]) == 'object' && haystack[i].tag == needle) {
        return true;
      }
    }
    return false;
  }
}

要在特定场景中使用它,请执行以下操作:

$('#tag_field').on('blur', function() {
  if(tagExists($(this).val(), tags) {
    // Tag exists. 
  }
});

请注意,这是区分大小写的,因为我定义了它,但可以通过在String.toLowerCase()上调用needle以及比较期间的每个标记轻松调整。

最后,也许我过于挑剔,但你的标签地图在技术上并不是一个JSON对象;它只是一个对象数组。