Проверьте, содержит ли массив какой-либо элемент другого массива с некоторым нулем в JavaScript - PullRequest
0 голосов
/ 28 июня 2019

У меня есть пример целевого массива: ["Potato", "Orange"].Я делаю вызов API, который возвращает объект с несколькими массивами, которые я должен посмотреть, если массив содержит какой-либо из элементов целевого массива.

У меня есть следующий фрагмент кода, но я получаю следующую ошибку: Uncaught TypeError: Невозможно прочитать свойство 'includes' со значением null

Я знаю, что это потому, что объект содержит некоторые значения Null.Как я могу это исправить?

Example:    const myArray = [
   {
    Track: ["Potato", "Apple"],
           ["Banna"],
           ["Potato", "Batman", "Orange"]
     Type: ["Some", "Stuff"]
     },
   {
    Track: null
     Type: ["Some", "Stuff"]
     }
    ]

const value = "Potato"

const matchingSession = myArray.filter((obj) => value.some(x => { return obj.types.includes(x) || obj.tracks.includes(x)}));

Что он должен вернуть:

[
["Potato", "Apple"],
["Potato", "Batman", "Orange"]
]

Это всего лишь пример.В массиве может быть более одного объекта.

1 Ответ

1 голос
/ 28 июня 2019
myArray.filter((arr) => Array.isArray(arr) && arr.length > 0)

Эта строка проверяет, является ли объект массива типом массива и не пустым

Подробнее о filter

Edit

const arrayOfValues = ["Potato", "Apple"];
myArray.filter((arr) => {

    return Array.isArray(arr) && CheckArray(arrayOfValues, arr) && arr.length > 0
});
function CheckArray(Array, ArrayToCheck) {
    let found = false;
    for (const value of Array) {
        if (ArrayToCheck.includes(value)) {
            found = true;
        }
    }
    return found;
}

Проверяет, содержит ли массив один из arrayOfValues, и является ли объект массивом, а не пустым!

Редактировать 2

const myArray = [
  {
    Track: ["Potato", "Apple"],
    data: [["Banna"],
      ["Potato", "Batman", "Orange"],
      ["Some", "Stuff"]],
  },
  {
    Tack: null,
    data: ["Some", "Stuff"],
  },
];
myArray.map((arr) => {
  return Array.isArray(arr.data) && CheckArray(arr.Track, arr.data);
}).filter(_ => !!_);

function CheckArray(arr, ArrayToCheck) {
  if (!arr || !Array.isArray(arr)) {
    return ArrayToCheck;
  }
  const foundArray = [];    
  if (ArrayToCheck.every(item => Array.isArray(item))) {
    for (const subArr of ArrayToCheck) {
      const ResultArray = CheckArray(arr, subArr);
      if (ResultArray.length > 0) {
        foundArray.push(ResultArray);
      }
    }
  } else {
    if (ArrayToCheck.map(val => arr.includes(val)).includes(true)) {
      foundArray.push(ArrayToCheck);
    }
  }
  return foundArray;
}

Проверяет, включает ли array одно из следующих значений:Track data, (работает для подмассивов (2d и т. Д.))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...