0

我正在尝试确定一个数组中的 ANY 值是否与另一个数组中的 ANY 值匹配。我遇到的问题是,如果我的数组中有两个值并且找到了第一个值但没有找到第二个值,那么当我需要它返回 TRUE 时,我的指标将显示为 FALSE。这是我正在使用的一些示例代码:

var itemArray = ['apples','bananas','cherries'];
var categoryArray = ['donuts','cherries','eclairs','fruit','grapes'];

for(var z=0; z<itemArray.length; z++){
  for(var y=0; y<categoryArray.length; y++){
    if(itemArray[z] == categoryArray[y]) var isInArray = true;
    else var isInArray = false;
  }
}

alert(isInArray);

感谢帮助,如果需要更多信息,请告诉我。

4

2 回答 2

1

您需要breakreturn一旦找到匹配的值。否则,如果它已经是,则elsecase 将覆盖。或者,初始化为,并在循环中将其分配给。这是我的做法:isInArraytrueisInArrayfalsetrue

function isInArray(itemArray, categoryArray) {
    for(var z=0; z<itemArray.length; z++) {
      for(var y=0; y<categoryArray.length; y++) {
        if(itemArray[z] == categoryArray[y]) return true;
      }
    }

    return false;
}

在这种情况下,我更喜欢提前返回。

于 2013-07-11T15:38:23.853 回答
1

您还可以使用indexOf稍微简化一下:

var itemArray = ['apples','bananas','cherries'];
var categoryArray = ['donuts','cherries','eclairs','fruit','grapes'];
var isInArray = false;
for(var z=0; z<itemArray.length; z++){
  if( categoryArray.indexOf(itemArray[z]) !== -1) {
    isInArray = true;
    break;
  }
}

alert(isInArray);
于 2013-07-11T15:42:57.107 回答