Как сравнить массив Javascript с массивом Papa Parse row.data - PullRequest
0 голосов
/ 08 мая 2019

Я использую фиксированный массив определенных кодов продуктов и хочу посмотреть, есть ли какие-либо из них в каждой строке файла CSV. Я могу видеть оба массива, но когда я пытаюсь сравнить любые подходящие элементы, они всегда возвращаются как ложные, даже когда я знаю, что есть совпадения.

Пока мне удалось получить CSV-файл, а затем анализировать строку за строкой, используя анализ Папа. Я нашел код JS для сравнения массивов, которые сравнивают одни и те же данные правильно, но мне нужна помощь, чтобы выполнить эту работу при сравнении row.data из Papa Parse.

Возможно, это что-то простое, но я очень плохо знаком с 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 голосов
/ 14 мая 2019

currentcodes.some(v => codestocheck.includes(v))

Предполагается, что currentcodes всегда является массивом, поскольку метод some принадлежит прототипу массива .

Обратите внимание, что вы установили header: true в объекте конфигурации вызова функции papa.parse.

Как сказано в официальном документе :

data - массив строк. Если header равно false, строки являются массивами; в противном случае они являются объектами данных, которые имеют имя поля.

Следовательно, currentcodes будет не массивом, а объектом. Проблема в том, что у объектов нет метода some по умолчанию.

Вы должны использовать Object.values ​​(...) , чтобы преобразовать значения вашего объекта в массив. Что может привести к Object.values(currentcodes).some(v => codestocheck.includes(v)).

...