嵌套过滤器返回空数组

zos*_*ozo 1 javascript

下面是我收到的数据,我正在尝试过滤,以便新数组仅包含具有所需位置的对象。

但是,我遇到了一个问题,我的函数返回[]一个空数组。

数据:

[
  { 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)

出了什么问题,如何解决这个问题并使其正确过滤?

Har*_*maz 5

在传递给 的回调中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)