首页 > 解决方案 > 基于另一个数组的嵌套过滤器数组

问题描述

我想过滤第二个数组,卡片,以便它只显示在 groups.cardsFilter 数组的第一个对象( id=1 )中的 cardsfFilter 数组中指定的记录

数组和所需的结果如下

const groups = [
  {
    id: 1,
    name: 'Melbourne Bands',
//Below is the array that I need to act as the filter for the cards array
    cardsFilter: [1, 2]
  },
  {
    id: 2,
    name: 'Sydney Bands',
    cardsFilter: [3]
  }
]

const cards =  [
  {
    id: '1',
    url: 'jimmyyukka.com',
    name: 'Jimmy Yukka',
    CreatedByUserId: 1
  },
  {
    id: '2',
    url: 'jimmyyukka.com',
    name: 'Due North',
    CreatedByUserId: 1
  },
  {
    id: '3',
    url: 'jimmyyukka.com',
    name: 'INXS',
    CreatedByUserId: 1
  }
]


const desiredResult = [
  {
    id: '1',
    url: 'jimmyyukka.com',
    name: 'Jimmy Yukka',
    CreatedByUserId: 1
  },
  {
    id: '2',
    url: 'jimmyyukka.com',
    name: 'Due North',
    CreatedByUserId: 1
  },
]

我正在努力弄清楚并且找不到这种简单方法的堆栈溢出示例。

我已经尝试过(一条记录) 我不知道如何使用数组执行此操作

const notQuiteRight= cards.filter(function(getFile){
  return getFile.id === "1"
});

标签: javascriptarraysfilternested

解决方案


cardsFilter从数组的第一个对象中提取属性groups,然后在cards数组上使用过滤器。

const groups = [{
    id: 1,
    name: 'Melbourne Bands',
    //Below is the array that I need to act as the filter for the cards array
    cardsFilter: [1, 2]
  },
  {
    id: 2,
    name: 'Sydney Bands',
    cardsFilter: [3]
  }
]

const cards = [{
    id: '1',
    url: 'jimmyyukka.com',
    name: 'Jimmy Yukka',
    CreatedByUserId: 1
  },
  {
    id: '2',
    url: 'jimmyyukka.com',
    name: 'Due North',
    CreatedByUserId: 1
  },
  {
    id: '3',
    url: 'jimmyyukka.com',
    name: 'INXS',
    CreatedByUserId: 1
  }
]


const { cardsFilter } = groups[0];

const desiredOutput = cards.filter(({id}) => cardsFilter.includes(+id));

console.log(desiredOutput);


推荐阅读