首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript过滤数组中的元素,将另一个数组中的元素放在一起

Javascript过滤数组中的元素,将另一个数组中的元素放在一起
EN

Stack Overflow用户
提问于 2018-07-26 22:06:11
回答 4查看 76关注 0票数 2

我有两个数组。一个像first = ['a','b','c'],另一个像second = ['acd','abd', 'gfa', 'kqb']。我想做的是一个函数,返回第二个数组中的元素,其中第一个数组中的元素一起出现。

例如,该函数将返回'acd','abd‘,因为这是第二个数组中唯一的元素,第一个数组中的元素一起出现。我需要它在javascript/typescript中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-26 22:19:26

这段代码完成了您所需的工作:

代码语言:javascript
复制
first = ['a','b','c'];
second = ['acd','abd', 'gfa', 'kqb'];

function findOccurencies(first, second) {
  const result = [];
  second.forEach(target => {
    let count = 0;
    first.forEach(source => {
      count += target.indexOf(source) >= 0 ? 1 : 0;
    });
    if (count >= 2) {
      result.push(target);
    }
  });
  return result;
}

console.log(findOccurencies(first, second));

票数 2
EN

Stack Overflow用户

发布于 2018-07-26 22:27:52

(请务必查看如何改进您在评论中提到的问题。但由于有人已经在这里发布了代码,而且我更喜欢我的解决方案,所以这里就是我的解决方案。)

以下是一种方法:

代码语言:javascript
复制
const foo = (arr1, arr2) => arr2.filter(str => arr1.reduce(
  (count, char) => count + (str.includes(char) ? 1 : 0), 
  0 
) > 1)

const result = foo(['a', 'b', 'c'], ['abc', 'abd', 'gfa', 'kqb'])

console.log(result)

这里可能存在一个效率低下的问题,因为即使在通过两个匹配之后,它也会继续循环第一个数组。如果它被证明是一个问题,这将在一定程度上缓解这一问题:

代码语言:javascript
复制
  (count, char) => count > 1 ? count : count + (str.includes(char) ? 1 : 0),

这仍然会循环,但一旦达到阈值,就不再执行开销很大的includes调用。如果您希望完全停止循环,则可能必须使用更强制的方法,例如for-loop。

票数 4
EN

Stack Overflow用户

发布于 2018-07-26 22:33:18

我可能会这样做:

代码语言:javascript
复制
const first = ['a','b','c'];
const second = ['acd','abd', 'gfa', 'kqb'];

const result = second.filter(
    word => first.filter(char => word.includes(char)).length > 1
);

console.log(result);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51540817

复制
相关文章

相似问题

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