检查一个数组是否包含另一个数组的任何元素,并且在JavaScript中为空

时间:2019-06-27 21:37:20

标签: javascript arrays object

我有一个目标数组示例:["Potato", "Orange"]。我正在进行api调用,该调用返回具有多个数组的对象,如果数组包含任何目标数组元素,则必须查看该对象。

我有以下代码,但出现以下错误:Uncaught TypeError:无法读取null的属性“ includes”

我知道这是因为对象包含一些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 个答案:

答案 0 :(得分:1)

myArray.filter((arr) => Array.isArray(arr) && arr.length > 0)

此行检查数组对象是否为数组类型并且不为空

详细了解filter

编辑

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数据之一((适用于子数组(2d等)))