首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript/Javascript中的多级过滤

Javascript/Javascript中的多级过滤
EN

Stack Overflow用户
提问于 2020-10-28 08:33:39
回答 3查看 46关注 0票数 1

我有一个数组,看起来如下:

代码语言:javascript
复制
var selection = ["14-3","19-5", "23-5", "40-8", "41-8"];

现在,我有两个数组: Array1指的是上面数组中值的第一部分(在下划线之前),比如19、23等等。Array2包含包含第2部分的值-5、8等等。

代码语言:javascript
复制
Array1 = ["23", "40"]
Array2 = ["5", "8"]

我希望筛选选择数组,以便:

  • 所有不匹配Array2值的项目都应该返回与Array2值匹配的项的
  • ,只返回与Array1匹配的项。

在上述情况下,过滤后的数组如下:

代码语言:javascript
复制
filteredSelection = ["14-3", "23-5", "40-8"]

我知道如何使用.filter()进行简单的筛选,该过滤器可以由另一个数组过滤数组。但在这种情况下,我不知道如何过滤这个。请帮帮忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-28 08:42:15

可以排除array2的值,并包含array1的值。

代码语言:javascript
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2020-10-28 08:46:16

你可以试试这个-

代码语言:javascript
复制
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);

Array1Array2转换为对象,使其具有成本效益.如果您可以最初将Array1Array2声明为对象,那就太好了。

票数 0
EN

Stack Overflow用户

发布于 2020-10-28 08:48:47

只要您知道自己在做什么,就应该可以使用filter

代码语言:javascript
复制
const filteredSelection = selection.filter(el => {
const [first, second] = el.split('-');
return !Array2.includes(second) || Array1.includes(first);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64569085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档