通过数组转换按数组中的值查找键

时间:2019-01-25 20:28:54

标签: javascript

我有一个具有id =“ autocomplete-input”的简单输入字段和一个具有id =“ searchButton”的按钮。然后,我将PHP数组与键值对结合使用,以便您可以在输入字段中键入一个值,然后为该值找到正确的键。我为此使用javascript,因此还需要将PHP数组转换为javascript。请在下面查看我的代码:

  <nav>
    <div class="nav-wrapper">
      <div class="input-field center-align">
        <input type="text" class="autocomplete" name="search" id="autocomplete-input" placeholder="Search.." />
        <button class="icon" id="searchButton"></button>
      </div>
    </div>
  </nav>

  <?php
    $testArray = array (
      'yellow' => 'banana',
      'red' => 'apple',
      'green' => 'pear'
    );
  ?>

  $('document').ready(function(){
      $('#searchButton').click(function(){
          var compSearch = document.getElementById('autocomplete-input').value;
          var tempArray = <?php echo json_encode($testArray); ?>;
          var key = search(compSearch, tempArray);
          document.getElementById("autocomplete-input").value = (key);
      })
      $('#searchButton').keypress(function(e){
          if(e.which == 13){ //Enter key pressed
              $('#searchButton').click(); //Trigger search button click event
          }
      });
  });

  function search(nameKey, myArray){
      for (var i=0; i < myArray.length; i++) {
          if (myArray[i].name === nameKey) {
            return myArray[i];
          }
      }
  }

无论输入什么,单击searchButton都只会返回“ undefined”。我不确定这是否是无法正常运行的“搜索”功能-我认为$ testArray的json_encode也可能会引起问题?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

tempArray将不是一个数组(*),而是一个普通对象,如下所示:

{
  yellow: 'banana',
  red: 'apple',
  green: 'pear'
}

*只有被索引数组(从索引0开始并且没有间隔)的PHP数组才能转换为JS数组。否则,它们会转换为普通对象。

所以search应该看起来像这样的衬纸:

return myArray[nameKey];

...但是可能选择一个更好的变量名,因为它不是数组。