请您检查我的代码错误在哪里?它应该循环通过1个数组来选择每个字符串,然后遍历第二个数组并检查,如果第二个字符串的值包含第一个字符串的值。
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 :(得分: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
。
注意:如果您想让搜索字符串与多个网址匹配,那么您不需要break
。 push
仍会阻止您覆盖之前的结果。
答案 1 :(得分: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++){
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});
});