如何将Javascript数组与Papa Parse row.data数组进行比较

时间:2019-05-08 08:36:50

标签: javascript jquery arrays papaparse

我正在使用一组固定的特定产品代码,并想查看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格式导出,以便用户下载。

任何想法都感激!

1 个答案:

答案 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))