javascript indexOf Array 在浏览器上的不同结果

javascript indexOf Array Different Result on browser

这是我的片段

var arrays = [
  ['name1', -10, 100, 1, 'abc', 'xxx'],
  ['name1', -10, 100, 1, 'abc', 'xxx'],
  ['name2', -8, 80, 1, 'bbb', 'zzz'],
  ['name1', -10, 100, 1, 'abc', 'xxx']
];

$('#searchsite').keyup(function() {
  var keyword = $(this).val();
  var minlength = 3;
  var result = [];
  if (keyword.length >= minlength) {
    for (var i = 0; i < arrays.length; i++) {
      if (arrays[i][0].toLowerCase().indexOf(keyword) !== -1) {
        result.push('<input type="button" name="button" class="btn btn-danger" value="' + arrays[i][0] + '"><br>');
      }
    }
    resultunique = jQuery.unique(result);
    $('#searchresult').html(resultunique);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="searchsite" />
<div id="searchresult"></div>

在 firefox 和 chrome

上得到不同结果的任何原因

您对 $.unique() 的使用是错误的,它仅适用于 dom 个元素。

Description: Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.

由于您每次都创建一个新的 input 元素标记,因此没有重复项。

您可以自己实现独特的逻辑

var arrays = [
  ['name1', -10, 100, 1, 'abc', 'xxx'],
  ['name1', -10, 100, 1, 'abc', 'xxx'],
  ['name2', -8, 80, 1, 'bbb', 'zzz'],
  ['name1', -10, 100, 1, 'abc', 'xxx']
];

$('#searchsite').keyup(function() {
  var keyword = $(this).val().toLowerCase();
  var minlength = 3;
  var result = [],
    keys = {};
  if (keyword.length >= minlength) {

    result = $.map(arrays, function(array) {
      var name = array[0].toLowerCase();
      if (!keys[name]) {
        keys[name] = true;

        if (name.indexOf(keyword) !== -1) {
          return '<input type="button" name="button" class="btn btn-danger" value="' + array[0] + '"><br>';
        }
      }

    })

    $('#searchresult').html(result.join(''));
  } else {
    $('#searchresult').html('');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="searchsite" />
<div id="searchresult"></div>