2个表的比较并不总是有效

时间:2016-09-10 11:51:35

标签: javascript jquery arrays json

我需要比较两个数组的记录,如果相等则添加样式 我这样做:

var json = ["VIP Section","Master Section","Press Section","God Section"];
var sections = ["VIP Section","Master Section"];

if ( sections.length > 0 ) {
  for (i = 0; i < json.length; i++) {
      if ( json[i] == sections[i] ) {
        $('#test-ul').append('<li style="color: red;">' + sections[i] + '</li>');
      } else {
        $('#test-ul').append('<li>' + json[i] + '</li>');
      }
  }
} else {
  $('#test-ul').append('<li>No sections!</li>');
}

然而,这并不总是有效...
一旦我有颜色等于元素,但接下来,我有所有元素没有颜色 enter image description here
...
enter image description here
哪里不好?或者也许是另一种解决方案?

1 个答案:

答案 0 :(得分:1)

设置它的方式,它将比较数组中相同位置的每个元素。例如,它仅将json中的第一项与sections中的第一项进行比较,依此类推。如果您的目标是确定json中的任何元素是否也在sections以及任何顺序中,那么请对indexOf()中的每个项目使用json {1}}确定数组项是否也存在于sections中。无论他们处于什么顺序,这都会有效。

在数组上使用indexOf()时,它将返回找到项目的数组中的位置。如果它不存在,它将返回-1。

注意在下面的代码段中,我将json中的第二个数组项移动到数组末尾以证明这一点。

var json = ["VIP Section","Press Section","God Section","Master Section"];
var sections = ["VIP Section","Master Section"];

if ( sections.length > 0 ) {
  for (i = 0; i < json.length; i++) {
      if ( sections.indexOf(json[i]) > -1 ) {
        $('#test-ul').append('<li style="color: red;">' + json[i] + '</li>');
      } else {
        $('#test-ul').append('<li>' + json[i] + '</li>');
      }
  }
} else {
  $('#test-ul').append('<li>No sections!</li>');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="test-ul"></ul>

进一步阅读:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf