我正在使用一组固定的特定产品代码,并想查看CSV文件的每一行中是否包含这些代码。我可以看到两个数组,但是当我尝试比较任何匹配项时,即使我知道有匹配项,它也总是返回false。
到目前为止,我已经设法获取CSV文件,然后使用Papa parse逐行解析。我已经找到了JS代码来比较可以正确地隔离比较相同数据的数组,但是当比较Papa Parse的row.data时,我需要帮助来完成这项工作。
这可能很容易,但是我对javascript还是很陌生,所以将不胜感激。
这是我要复制的有效比较代码:
let b = ["CS165160104", "CS165160105", "CS165160325", "CS166000103", "EN00451003102072M"];
let a = ["CS165160325", "0"];
console.log(a, b, a.some(v => b.includes(v)));
if(a, b, a.some(v => b.includes(v))){
console.log("wazzup")
};
这是JS和Papa Parse代码,似乎无法产生相同的比较结果:
$("#parseit").on("click", function() {
let codestocheck = ["CS165160104", "CS165160105", "CS165160325", "CS166000103", "EN00451003102072M"];
///* GET CSV FILE *///
const Http = new XMLHttpRequest();
const url = 'https://cdn.shopify.com/s/files/1/2725/8056/files/shopify-csv-test.csv?34741';
Http.open("GET", url);
Http.send();
Http.onreadystatechange = (e) => {
var csvdata = Http.responseText
////* PARSE CSV WITH PAPA PARSE *///
var newdata = Papa.parse(csvdata, {
header: true,
step: function(row) {
let currentcodes = row.data;
if (currentcodes, codestocheck, currentcodes.some(v => codestocheck.includes(v))) {
console.log("TRUE")
}
},
})
}
});
我假设row.data数组的格式与我的主数组没有可比性?
接下来,我的计划是将匹配的数据收集到一个数组中,并以CSV格式导出,以便用户下载。
任何想法都感激!
答案 0 :(得分:0)
currentcodes.some(v => codestocheck.includes(v))
您假设currentcodes
始终是数组,因为some
方法属于array's prototype。
请注意,您在header: true
函数调用的配置对象中设置了papa.parse
。
如official doc中所述:
data
是一个行数组。如果header
为假,则行为数组;否则为行。 否则,它们是由字段名称作为关键字的数据对象。
因此,currentcodes
不是数组而是对象。问题在于对象默认情况下没有some
方法。
您应该使用Object.values(...)将对象的值转换为数组。可能会导致Object.values(currentcodes).some(v => codestocheck.includes(v))
。