下面是我收到的数据,我正在尝试过滤,以便新数组仅包含具有所需位置的对象。
但是,我遇到了一个问题,我的函数返回[]一个空数组。
数据:
[
{ data: [[Object], [Object], [Object]], id: 1 },
{ data: [[Object]], id: 2 },
{ data: [[Object], [Object], [Object], [Object]], id: 3 }
];
Run Code Online (Sandbox Code Playgroud)
数据[1]:
{"data": [{"name": "Joe", "job": "N/A", "location": "Los Angeles"}], "id": 2}
Run Code Online (Sandbox Code Playgroud)
这是我当前的功能:
const locations = ["Los Angeles", "Chicago"];
...
const filteredData = data.filter((i) =>
i.data.filter((j) => locations.includes(j.location)),
);
return filteredData;
Run Code Online (Sandbox Code Playgroud)
出了什么问题,如何解决这个问题并使其正确过滤?
在传递给 的回调中Array.filter(),您需要返回一个boolean值来过滤数组。如果不返回任何内容,过滤器将返回一个空数组。
但在您的情况下,您返回的内部过滤数组至少返回一个空数组,而外部过滤器将其视为一个true值。因此外部过滤器将返回原始数组中的所有项目。(不是你所说的空的)
此外,您返回filteredData的位置会导致语法错误。
const data = [
{"data": [{"name": "Joe", "job": "N/A", "location": "Los Angeles"}], "id": 2},
{"data": [{"name": "Jane", "job": "N/A", "location": "Charlotte"}], "id": 3},
]
const locations = ["Los Angeles", "Chicago"];
const filteredData = data.filter((i) =>
i.data.filter((j) => locations.includes(j.location)).length > 0,
);
console.log(filteredData); Run Code Online (Sandbox Code Playgroud)