我有一个数组,看起来如下:
var selection = ["14-3","19-5", "23-5", "40-8", "41-8"];现在,我有两个数组: Array1指的是上面数组中值的第一部分(在下划线之前),比如19、23等等。Array2包含包含第2部分的值-5、8等等。
Array1 = ["23", "40"]
Array2 = ["5", "8"]我希望筛选选择数组,以便:
在上述情况下,过滤后的数组如下:
filteredSelection = ["14-3", "23-5", "40-8"]我知道如何使用.filter()进行简单的筛选,该过滤器可以由另一个数组过滤数组。但在这种情况下,我不知道如何过滤这个。请帮帮忙。
发布于 2020-10-28 08:42:15
可以排除array2的值,并包含array1的值。
var selection = ["14-3","19-5", "23-5", "40-8", "41-8"],
array1 = ["23", "40"],
array2 = ["5", "8"],
result = selection.filter(s => {
const [l, r] = s.split('-');
return !array2.includes(r) || array1.includes(l);
});
console.log(result);
发布于 2020-10-28 08:46:16
你可以试试这个-
const selection = ["14-3","19-5", "23-5", "40-8", "41-8"];
const Array1 = ["23", "40"];
const Array2 = ["5", "8"];
const obj1 = Array1.reduce((acc, curr) => ({...acc, [curr]: 1}), {});
const obj2 = Array2.reduce((acc, curr) => ({...acc, [curr]: 1}), {});
const res = selection.filter(item => {
const [left, right] = item.split('-');
return obj1[left] || obj2[right] === undefined;
});
console.log(res);
将Array1和Array2转换为对象,使其具有成本效益.如果您可以最初将Array1和Array2声明为对象,那就太好了。
发布于 2020-10-28 08:48:47
只要您知道自己在做什么,就应该可以使用filter:
const filteredSelection = selection.filter(el => {
const [first, second] = el.split('-');
return !Array2.includes(second) || Array1.includes(first);
});https://stackoverflow.com/questions/64569085
复制相似问题