在Array中查找string的值

时间:2016-06-23 01:54:31

标签: javascript jquery arrays json

我已经在这个简单的脚本上工作了几个小时,现在已经碰壁了。我有一个由JSON值组成的数组。当用户搜索字符串并单击该按钮时,脚本会根据存储在数组中的值检查字符串。

我坚持的部分是条件,它总是不返回匹配 - 即使我输入一个我知道在JSON文件中的字符串。

以下代码。任何指导/指示将不胜感激。

感谢您的帮助!

标记。

    $('#validate-info').on('click', function(){

      // Get data, initiate callback
      $.getJSON('memberships.json', validateMembership);
      // Execute callback function
      function validateMembership(data) {

        // Capture entered value
        var userVal = document.getElementById('form-data').value;
        console.log(userVal);

        var infoTxt = '';

        // Push all items into an Array
        var infoArray = [];

        $.each(data, function(member, memberInfo) {
          infoTxt += '<p><strong>Name:</strong> ' + memberInfo.name + '<br />';
          infoTxt += '<strong>Membership No.:</strong> ' + memberInfo.number + '<br />';
          infoTxt += '<strong>Expiry Date:</strong> ' + memberInfo.expiry + '</p>';
          infoArray.push({
              name: memberInfo.name, 
              number:  memberInfo.number,
              expiry: memberInfo.expiry
          });
        });

        if ($.inArray(userVal, infoArray) > -1 ) { 
          // the value is in the array
          $('#response').html('<p style="color: green;">In the array</p>');
        } else {
          $('#response').html('<p style="color: red;">Sorry, no matches.</p>');
        }

      }

    });

1 个答案:

答案 0 :(得分:2)

您将输入字符串与对象进行比较,它们永远不会匹配。您只需要与名称进行比较。您可以使用Array.prototype.some函数来测试它们是否匹配。

if (infoArray.some(function(obj) {
    return obj.name == userVal;
})) {
    $('#response').html('<p style="color: green;">In the array</p>');
} else {
    $('#response').html('<p style="color: red;">Sorry, no matches.</p>');
}

您也可以在推送infoArray的循环中执行此操作。

var match = false;
$.each(data, function(member, memberInfo) {
  infoTxt += '<p><strong>Name:</strong> ' + memberInfo.name + '<br />';
  infoTxt += '<strong>Membership No.:</strong> ' + memberInfo.number + '<br />';
  infoTxt += '<strong>Expiry Date:</strong> ' + memberInfo.expiry + '</p>';
  infoArray.push({
      name: memberInfo.name, 
      number:  memberInfo.number,
      expiry: memberInfo.expiry
  });
  if (memberInfo.name == userVal) {
    match = true;
  }
});

if (match) {
    $('#response').html('<p style="color: green;">In the array</p>');
} else {
    $('#response').html('<p style="color: red;">Sorry, no matches.</p>');
}