2017-07-15 89 views
0

請您檢查我的代碼錯誤在哪裏?它應該循環槽1數組來選擇每個字符串,然後通過第二個數組循環,並檢查第二個字符串的值是否包含第一個字符串的值。JavaScript搜索和循環 - 不會返回正確的值

for (var i = 0; i < oldLines.length; i++){ 
    var subStringEach = oldLines[i]; 
    var subStringEachNoDash = subStringEach.replace(/[^a-z0-9]/g,''); 

    // read New URLs and line by line save them as an object 
    var newLines = $('#newUrl').val().split(/\n/); 
    var newUrlResult = []; 

    for (var j = 0; j < newLines.length; j++){ 
     var newUrlString = newLines[j]; 
     var newUrlStringNoDash = newUrlString.replace(/[^a-z0-9]/g,''); 

     var isThere = newUrlStringNoDash.search(subStringEachNoDash); 
     if (isThere !== -1) { 
     newUrlResult[i] = newLines[j]; 
     } 
     else { 
     newUrlResult[i] = ""; 
     } 
    } 

stockData.push({OldURL:oldLines[i],SearchSubstring:subStringEach,NewURL:newUrlResult[i]}); 
    } 

現在發現只有結果的一部分。我的地方,第一個數組:

anica-apartment 
casa-calamari-real 
ostrovni-apartman 

和第二陣列:

http://tempweb3.datastack.cz/be-property/anica-apartment/ 
http://tempweb3.datastack.cz/be-property/ostrovni-apartman/ 
http://tempweb3.datastack.cz/be-property/st-michael-apartment/ 
http://tempweb3.datastack.cz/be-property/casa-calamari-real/ 

,它只能找到與回報casa-calamari-real, http://tempweb3.datastack.cz/be-property/casa-calamari-real/和其他人返回空。

任何想法請嗎?

這裏是Codepen的完整代碼:https://codepen.io/vlastapolach/pen/VWRRXX

+0

這裏有一個工作版本:https://jsfiddle.net/khrismuc/xh8y14jL/ –

+0

謝謝@ChrisG。它終於工作:) –

回答

3

一旦你找到一個匹配你應該退出內部循環,否則這個循環的下一次迭代將再次清除你已經匹配的部分。

其次,你應該使用push而不是訪問索引,因爲你不知道你會得到多少結果。而作爲一個結果,你將需要與它相關的查找字符串(因爲i沒有必要同在兩個數組)

所以更換:

if (isThere !== -1) { 
    newUrlResult[i] = newLines[j]; 
    } 
    else { 
    newUrlResult[i] = ""; 
    } 

與此:

if (isThere !== -1) { 
    newUrlResult.push({ 
     searchSubstring: subStringEach, 
     newURL: newUrlString 
    }); 
    break; // exit loop 
    } 

最後,剛輸出newUrlResult

注意:如果您想讓搜索字符串與多個網址匹配,那麼您不需要breakpush然後仍然會阻止您覆蓋以前的結果。

+0

非常感謝你!加入休息解決了它。這麼簡單.. :)謝謝! –

0

我看到你已經解決了)但是也許你會喜歡這個代碼) newUrlResult變量可能是一個字符串我猜,因爲循環中斷時發現一個值。如果找不到值,那麼只會出現空字符串。我不確定你需要在每次迭代時調用newLines = $('#newUrl').val()。split(/ \ n /)。

var stockData = []; 
 
    
 
oldLines.map(function(oldLine){ 
 
     var cleanOldLine = oldLine.replace(/[^a-z0-9]/g,''), 
 
      newLines = $('#newUrl').val().split(/\n/), 
 
      newUrlResult = ''; 
 
     
 
     for (var j = 0; j < newLines.length; j++){ 
 
     \t var newLine = newLines[j], 
 
      cleanNewLine = newLine.replace(/[^a-z0-9]/g,''), 
 
      ifExists = cleanNewLine.search(cleanOldLine); 
 
     
 
     if (ifExists !== -1) { 
 
      newUrlResult = newLine; 
 
      break; 
 
     } 
 
     } 
 
     
 
     stockData.push({OldURL:oldLine, SearchSubstring:cleanOldLine, NewURL:newUrlResult}); 
 
});

+0

嗨,謝謝你的提示。現在它正在工作,這裏是完整的代碼,如果你好奇:) https://github.com/vlastapolach/SEO-Redirect它正在與粘貼URL列表的每個URL在文本框和每個URL在新行,它是需要顯示找到的匹配或空格,如果沒有找到確切的行順序。一切都取決於用戶輸入,沒有「硬編碼」字符串。它應該是有用的SEO專家,隨時下載並使用它,如果你喜歡:) –