Javascript -使用数组中的元素来过滤数组对象



我正在尝试根据另一个数组中的元素过滤对象数组。

我想要过滤的对象数组是:

const data = [
{id: 1, method: "bike"},
{id: 2, method: "walk"},
{id: 3, method: "bus"},
{id: 4, method: "bike"},
{id: 5, method: "walk"},
{id: 5, method: "bus"},
]

我有三个数组中的一个包含我想包含的method

const filter1 = ['bike'];
const filter2 = ['bike', 'walk'];
const filter3 = ['bike', 'walk', 'bus'];

我能够push过滤数组到一个新的数组,但我希望过滤数组具有与data相同的结构,而不是数组的数组。

这是我当前的方法,它给了我一个二维数组:

let output = [];
const filterArr = filter2.forEach(element => {
const filt = data.filter(el => el.method === element);
output.push(filt);
});

我想要的输出是:

const want = [
{id: 1, method: "bike"},
{id: 2, method: "walk"},
{id: 4, method: "bike"},
{id: 5, method: "walk"},
]

我会将过滤器Array转换为Set,并使用Set.prototype.has方法来检查当前项目的method是否存在于其中。

const filter2 = new Set(['bike', 'walk']);
const data = [
{ id: 1, method: "bike" },
{ id: 2, method: "walk" },
{ id: 3, method: "bus"  },
{ id: 4, method: "bike" },
{ id: 5, method: "walk" },
{ id: 5, method: "bus"  },
];
const filtered = data.filter(({ method }) => filter2.has(method));
console.log(filtered);
.as-console-wrapper { top: 0; max-height: 100% !important; }

您可以将一个筛选器数组作为方法,并检查数据数组的方法是否包含在筛选器数组中。

methods = filter2, // one of your filters.
result = data.filter(({ method }) => methods.includes(method));

最新更新