2015-11-04 69 views
-5

我正在測試針對某些字符的數組,我想知道爲什麼它通過數組循環4次。我只是想通過toTest循環一次。下面是代碼和小提琴爲什麼這是循環遍歷數組的4次?

var testAgainst = ['and','+',',','&']; 
var toTest = ["$ Red Arcane Playing Cards Deck Ellusionist Rare New Sealed $", "Ellusionist Red Arcane Deck - Very Rare - Playing Cards - Magic Tricks- New", "24 HR Sale! Red and White LTD & Red Arcane Playing Cards Ellusionist near mint", "4x Arcane Playing Cards Deck Collection Rare Gold Red + Black White Ellusionist", "Red Arcane Playing Cards by Ellusionist", "24 HR SALE Red Arcane Playing Cards by Ellusionist", "RED ARCANE PLAYING CARDS", "Ellusionist - New/Sealed Red Arcane Playing cards c.2013 - Rare deck"]; 

for(var i = 0; i < testAgainst.length; i++){ 
    for(var j = 0; j < toTest.length; j++){ 
     if (toTest[j].indexOf(testAgainst[i]) > -1){ 
      console.log('match: ' + toTest[j]); 
     }else{ 
      console.log('no match ' + toTest[j]); 
     } 
    } 
} 

小提琴:https://jsfiddle.net/bmpgsxb2/4/

爲什麼會循環經歷了這麼多?

感謝所有的人指出我正確的方向。我應該意識到這是怎麼回事。玩了一段時間後我來到了這一點,這只是對數據進行過濾一次,並且會將數據高達取決於它是否符合標準或不

的jsfiddle UPDATE:https://jsfiddle.net/bmpgsxb2/7/

+0

難道你忘了代碼中的break語句嗎? – Serjik

+0

由於testAgainst中有4個項目? –

+3

因爲你有兩個嵌套循環,並且你通過'toTest'循環多次,因爲你有'testAgain'中的項目...! – deceze

回答

1

你從testAgainsttestAgainst.length === 4寫出for循環,這就是爲什麼它循環4次的原因toTest

你算法很好。我沒有看到任何其他的可能性,也許通過使用正則表達式,但它取決於你想要做什麼

0

你的循環是在另一個循環運行testAgainst.length次(這是4)。

for(var i = 0; i < testAgainst.length; i++){ 
    for(var j = 0; j < toTest.length; j++){ 
0

你清楚地迭代testAgainst.length * toTest.length倍,也就是4 * 8次= 32

0

你的算法中是不錯的,它可以在運行外環toTest.length和內部更加優化循環到testAgainst.length,以便一旦找到testAgainst關鍵字,然後匹配找到,不需要迭代更多,也可以在if循環中放入break語句。