我有一个目标数组示例:["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"]
]
这只是一个例子。数组中可能有多个对象。
答案 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
之一,以及对象是否为数组而不为空!
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等)))