JavaScript搜索和循环-不';t返回正确的值
请问,你能查一下我的代码吗?错误在哪里?它应该通过1个数组循环选择每个字符串,然后通过第二个数组循环并检查第二个字符串中的值是否包含第一个字符串的值JavaScript搜索和循环-不';t返回正确的值,javascript,arrays,search,Javascript,Arrays,Search,请问,你能查一下我的代码吗?错误在哪里?它应该通过1个数组循环选择每个字符串,然后通过第二个数组循环并检查第二个字符串中的值是否包含第一个字符串的值 for (var i = 0; i < oldLines.length; i++){ var subStringEach = oldLines[i]; var subStringEachNoDash = subStringEach.replace(/[^a-z0-9]/g,''); // read New URL
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]});
}
对于第二个数组:
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上的完整代码:一旦找到匹配项,就应该退出内部循环,否则该循环的下一次迭代将再次清除已匹配的内容 其次,您应该使用
push
而不是访问索引,因为您不知道将获得多少结果。因此,您需要将find字符串与其关联(因为i
在两个数组中不必相同)
因此,请替换:
if (isThere !== -1 ) {
newUrlResult[i] = newLines[j];
}
else {
newUrlResult[i] = "";
}
为此:
if (isThere !== -1 ) {
newUrlResult.push({
searchSubstring: subStringEach,
newURL: newUrlString
});
break; // exit loop
}
最后,只需输出newUrlResult
注意:如果您想保留搜索字符串与多个URL匹配的可能性,那么您不需要使用
中断。推送仍然会阻止您覆盖以前的结果。一旦找到匹配项,您应该退出内部循环,否则该循环的下一次迭代将再次清除您已匹配的内容
其次,您应该使用push
而不是访问索引,因为您不知道将获得多少结果。因此,您需要将find字符串与其关联(因为i
在两个数组中不必相同)
因此,请替换:
if (isThere !== -1 ) {
newUrlResult[i] = newLines[j];
}
else {
newUrlResult[i] = "";
}
为此:
if (isThere !== -1 ) {
newUrlResult.push({
searchSubstring: subStringEach,
newURL: newUrlString
});
break; // exit loop
}
最后,只需输出newUrlResult
注意:如果您想保留搜索字符串与多个URL匹配的可能性,那么您不需要使用中断。然后,推送
仍将阻止您覆盖以前的结果。我看到您已经解决了问题),但可能您也会喜欢此代码)
我猜newUrlResult变量可能是字符串,因为找到一个值时循环会中断。如果找不到值,则只有空字符串。我不确定每次迭代都需要调用newLines=$('#newUrl').val().split(/\n/)
var-stockData=[];
oldLines.map(函数(oldLine){
var cleanOldLine=oldLine.替换(/[^a-z0-9]/g',),
换行符=$('#newUrl').val().split(/\n/),
newUrlResult='';
对于(var j=0;j });代码>我知道你已经解决了)但也许你也会喜欢这个代码)
我猜newUrlResult变量可能是字符串,因为找到一个值时循环会中断。如果找不到值,则只有空字符串。我不确定每次迭代都需要调用newLines=$('#newUrl').val().split(/\n/)
var-stockData=[];
oldLines.map(函数(oldLine){
var cleanOldLine=oldLine.替换(/[^a-z0-9]/g',),
换行符=$('#newUrl').val().split(/\n/),
newUrlResult='';
对于(var j=0;j });代码>这里有一个工作版本:谢谢@ChrisG。它终于起作用了:)这是一个有效的版本:谢谢@ChrisG。它终于起作用了:)非常感谢!添加中断解决了它。太简单了……)谢谢!非常感谢你!添加中断解决了它。太简单了……)谢谢!嗨,谢谢你的小费。现在它正在工作,下面是完整的代码,如果您好奇的话:)它正在使用文本框,您可以在文本框中粘贴URL列表,每个URL都位于新行,如果找不到精确的行顺序,则需要显示找到的匹配项或空白。一切都取决于用户输入,没有“硬编码”字符串。它应该是有用的搜索引擎优化专家,随时下载并使用它,如果你喜欢:)嗨,谢谢你的提示。现在它正在工作,下面是完整的代码,如果您好奇的话:)它正在使用文本框,您可以在文本框中粘贴URL列表,每个URL都位于新行,如果找不到精确的行顺序,则需要显示找到的匹配项或空白。一切都取决于用户输入,没有“硬编码”字符串。它应该是有用的搜索引擎优化专家,随时下载并使用它,如果你喜欢:)