【问题标题】:Filtering array A based on whether it contains any or partial elements from array B根据数组 A 是否包含数组 B 中的任何或部分元素来过滤数组 A
【发布时间】:2021-10-19 21:22:57
【问题描述】:

我有两个数组,数组 A 有一个元素列表,这些元素可能包含或不包含数组 B 中的元素。我想过滤数组 A,使其仅包含包含数组 B 中至少一个元素的元素。

const a = [
  'cqAWS1x2', 
  'cqAM1c',
  'cqA10a + cqA10b',
  'cqA10axZAF + cqA10bxZAF']

const b = [
  'cqAWS1x2',
  'cqA10a',
  'cqA10axZAF']

我想过滤一个,所以它会是

 ['cqAWS1x2',
  'cqA10a + cqA10b',
  'cqA10axZAF + cqA10bxZAF']

'cqAWS1x2' 因为数组 b 包含该元素,'cqA10a + cqA10b' 因为 b 包含“cqA10a”,它是 'cqA10a + cqA10b' 的一部分。 'cqA10axZAF + cqA10bxZAF' 也一样,因为 b 包含 'cqA10axZAF'。

这是我目前所拥有的:

a.filter(avc => b.some(bvc => bvc.includes(avc)))

在结果中,我只得到 ['cqAWS1x2'] 而不是 'cqA10a + cqA10b''cqA10axZAF + cqA10bxZAF'

感谢大家的帮助!

【问题讨论】:

标签: javascript


【解决方案1】:

您只需在includes() 调用中切换avcbvcavc 是较长的字符串,检查它是否包含较短的bvc)。

const a = ['cqAWS1x2', 'cqAM1c', 'cqA10a + cqA10b', 'cqA10axZAF + cqA10bxZAF'];
const b = ['cqAWS1x2', 'cqA10a', 'cqA10axZAF'];

console.log(a.filter((avc) => b.some((bvc) => avc.includes(bvc))));

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多