当前位置: 首页 > 知识库问答 >
问题:

通过匹配来自另一个数组的值对数组进行分组

郏稳
2023-03-14

我试图通过从另一个数组列表中筛选数组来重构它。

包含筛选器的数组:

const filteringTags: [
    'Kitchen',
    'Accessories',
    ...
]

我要操作的数组:

[
    {
        category: 'free',
        date: '2020-04-04',
        title: 'Some Title',
        tags: [
            'Kitchen',
            'Accessories'
        ]
    },
    {
        category: 'premium',
        date: '2020-04-05',
        title: 'Another Title',
        tags: [
            'Kitchen'
        ]
    },
    ...
]

预期结果:

[
    'Kitchen': [
        {
            category: 'free',
            date: '2020-04-04',
            title: 'Some Title',
            tags: [
                'Kitchen',
                'Accessories'
            ]
        },
        {
            category: 'premium',
            date: '2020-04-05',
            title: 'Another Title',
            tags: [
                'Kitchen'
            ]
        }
    ],
    'Accessories': [
        {
            category: 'free',
            date: '2020-04-04',
            title: 'Some Title',
            tags: [
                'Kitchen',
                'Accessories'
            ]
        }
    ]
]

我试过的:不幸的是,这里没有什么有用的东西可以张贴。

我尽量避免使用库,所以如果您对使用ES6有任何建议,我将非常感谢。

共有3个答案

马银龙
2023-03-14

简短而漂亮的解决你的任务

const filteringTags = [
  'Kitchen',
  'Accessories',
] 

const arr = [
  {
    category: 'free',
    date: '2020-04-04',
    title: 'Some Title',
    tags: [
        'Kitchen',
        'Accessories'
    ]
},
{
    category: 'premium',
    date: '2020-04-05',
    title: 'Another Title',
    tags: [
        'Kitchen'
    ]
}
]

const resultArr = filteringTags.map((it, index) => {
  return { [it]: arr }
})

如果需要对象,请使用此函数

const resultObj = filteringTags.reduce((acc, it) => {
  return { ...acc, [it]: arr }
}, {})
郎玮
2023-03-14

下面是一个完整的工作示例,它产生了所需的结果:

null

const filteringTags = [
    'Kitchen',
    'Accessories',
];

const data = [
    {
        category: 'free',
        date: '2020-04-04',
        title: 'Some Title',
        tags: [
            'Kitchen',
            'Accessories'
        ]
    },
    {
        category: 'premium',
        date: '2020-04-05',
        title: 'Another Title',
        tags: [
            'Kitchen'
        ]
    },
];

function byTag(tags, data) {
  let tagMap = {};
  for (let tag of tags) {
    tagMap[tag] = [];
    for (let datum of data) {
       if (datum.tags.includes(tag)) {
          tagMap[tag].push(datum);
       }
    }
  }
  return tagMap;
}

let result = byTag(filteringTags, data);
console.log(JSON.stringify(result, null, 2));
雷献
2023-03-14

将所需输出视为对象数组,

null

const data = [
  {
    category: 'free',
    date: '2020-04-04',
    title: 'Some Title',
    tags: ['Kitchen', 'Accessories'],
  },
  {
    category: 'premium',
    date: '2020-04-05',
    title: 'Another Title',
    tags: ['Kitchen'],
  },
];

const filteringTags = ['Kitchen', 'Accessories'];

const getGroupedData = (data, filters) => {
  const result = {};
  filters.forEach(filter => {
    result[filter] = [
      ...(result[filter] || ''),
      ...data.filter(d => d.tags.includes(filter)),
    ];
  });
  return result;
};

let finalResult = getGroupedData(data, filteringTags);

finalResult = Object.keys(finalResult).map(key => ({
  [key]: finalResult[key],
}));

console.log(finalResult);
 类似资料:
  • 问题内容: 在PHP中可以做这样的事情吗?您将如何编写函数?这是一个例子。顺序是最重要的。 我想做类似的事情 因为最后我使用了foreach()并且它们的顺序不正确(因为我将值附加到需要正确顺序的字符串中,而且我事先也不知道所有的数组键/值)。 我看过PHP的内部数组函数,但似乎只能按字母或数字排序。 问题答案: 只需使用或即可。通过以给定的数组(按正确的顺序)开始并用实际数组中的数据覆盖/添加键

  • 问题内容: 假设我有一个自定义类的数组,每个类都包含一个名为 我还有一个任意值数组,称为,如下所示: 我的目标是对所有QB 进行排序,然后再对所有WR,RB和TE 进行排序。 我当前的操作方式是遍历中的每个元素,然后遍历所有播放器以附加到新数组。但是,我想不出一种更简单(更有效)的方法来做到这一点。非常感谢任何提示或指示。谢谢。 问题答案: 编辑: 我原来的方法是狗屎。这篇文章吸引了很多人的注意力

  • 问题内容: 我有一对对。是否可以精确匹配&的值,然后检查其范围值? 示例:在doc下面是一个带有名称,值对的数组。我需要检查它是否具有键,然后检查它的值是否小于1000。 以下是我的过滤器。 我还需要检查以下内容,以便返回结果 “ client.name”必须是“ Athena” “ client.db。@ type”必须为“ Oracle”,然后继续进行以下检查 找不到“ client.db.o

  • 问题内容: 有谁知道(如果可能的话,也用破折号)通过对象键对对象数组进行分组然后根据分组创建新的对象数组的方法吗?例如,我有一系列汽车对象: 我想制作一组新的汽车对象,并按以下类别分组: 问题答案: 。简单,并允许在分组结构中的对象中进行一些重复。 但是,OP还要求删除重复的密钥。如果您想一路走下去: 产量: 如果您想使用Underscore.js进行此操作,请注意,其版本称为。

  • 问题内容: 是否可以对看起来像这样的数组进行排序和重新排列: 匹配此数组的安排: 不幸的是,我没有任何要跟踪的ID。我将需要优先处理items-array,以使其尽可能接近sortingArr。 更新: 这是我正在寻找的输出: 任何想法如何做到这一点? 问题答案: 就像是: 这是一个较短的代码,但是会破坏数组:

  • 问题内容: 我正在尝试通过另一个数组的值对一个数组的行进行排序。例如: 我想按降序对arr1进行排序,并保持arr1和arr2之间的当前关系(即,在对两者进行排序之后,and的行都相同)。 问题答案: 用法如下: 本示例以降序排列。

  • 问题内容: 我有两个numpy数组A和B。A包含唯一值,而B是A的子数组。 例如: 问题答案: 您可以使用带有- 如果您关心维护订单,也可以使用- 对于一般情况,当&是未排序的数组时,您可以在中引入选项,就像这样- 为了解决一般情况,我还会添加我最喜欢的内容- 样品运行-

  • 问题内容: 从这个问题的答案(使用一个较少的内存,沿着一个特定轴对另一个numpy数组进行排序)中,我学习了如何根据另一个numpy数组的值对多维numpy数组进行排序,而又不创建太多额外的数组。 但是,仅当数组和具有相同形状时才有效。我的数组是一维数组,但数组是ND数组(未指定N)。通过一维数组的值在特定轴上对数组进行排序是一种好方法(高效)吗? 问题答案: 使用与关键字参数: 如果要使用花式索