我从products.csv获取产品代码并将它们推送到产品数组中。当我在数组中搜索一个字符串时,它仍然返回-1,而它已经有一个匹配的值。
jQuery.get('v/wds-custom/products.csv', function(data) {
var products = new Array();
var rows = data.split("\n");
for (var i = 0; i < rows.length; i++)
products.push(rows[i].toLowerCase());
if($('#vCSS_mainform').length > 0) {
var mainform_action = $('#vCSS_mainform').attr('action').toLowerCase();
if(mainform_action.indexOf("productdetails.asp") > -1) {
var current_productCode = decodeURIComponent(mainform_action.split("=")[1]);
console.log(products); // ["alg-207", "alg-357", "alg-434"]
console.log(current_productCode); // alg-207
console.log(products.indexOf(current_productCode)); // -1
}
}
});
重要提示:如果我使products.csv单行只有alg-207,则返回0,但不能处理多行。
答案 0 :(得分:1)
我怀疑你看到了控制台的神器。控制台可能有点棘手:如果它向您显示> Array[3]
产品,然后您单击箭头查看它们,它可能会向您显示数组的内容,当您单击时箭头,而不是记录行。 (是的,真的。)Chrome的工作方式是这样的(有时,根据控制台是关闭还是打开时调用log
- 是的,确实如此),以及其他人也可以。这是console.log无法替代设置断点和单步执行代码,在执行暂停时实时检查变量的众多原因之一。
但是,如果由于某种原因你 使用console.log
而不是调试器,你可以通过执行以下操作来使其成为日志文本而不是实时对象引用:
console.log(JSON.stringify(products));
......而且相似。
答案 1 :(得分:0)
根据您的重要,并假设data
是一个CSV字符串,可能是您在CSV解析中缺少一个步骤。算法在"\n"
上拆分,但从不在逗号上拆分。因此对于具有多个条目的许多CSV行,例如
alg-207,alg-208
alg-203,alg-105
您可能会获得一个类似于以下内容的产品数组:
["alg-207,alg-208","alg-203,alg-105"]
这可以解释为什么当你搜索的项目包含单个元素的行时,它会起作用,但不会包含多个元素。
如果是这种情况,你需要添加逻辑来分割逗号上的每一行,以获得要处理的数组数组。
如果不是您有多个元素的行,我不确定会发生什么。