0

I am trying to determine if ANY value from one array matches ANY value from another array. The problem that i am having is that if there are two values in my array and the first value is found but the second is not found, my indicator is coming up as FALSE when i need it to return TRUE. Here is some example code that i'm working with:

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);

Appreciate the help, let me know if more information is needed.

4

2 に答える 2

1

一致する値を見つけたら、breakまたはする必要があります。returnそれ以外の場合は、ケースが既に存在する場合はelse上書きされます。または、 に初期化し、ループ内でにのみ割り当てます。これが私がそれを行う方法です: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 に答える