首页 > 解决方案 > 基于彼此的值键对值键进行分组

问题描述

抱歉标题不好,我真的不知道如何表达这个,这可能是一个微不足道的问题......

来自数组的数据看起来像这样,每个名称可以有不定数量的sequence,我想做的是按名称对它们进行分组并将每个序列放入一个数组中

[
{
    name: 'Mike',
    sequence: 'AAAA',
},
{
    name: 'Bob',
    sequence: 'ABAB',
},
{
    name: 'Bob',
    sequence: 'AAAB',
},
{
    name: 'Marvin',
    sequence: 'AAAA',
},
{
    name: 'Marvin',
    sequence: 'AABA',
},
{
    name: 'Marvin',
    sequence: 'BBBB',
},
]

我希望通过使用console.log(name, array)例如为每个名称返回的内容是这样的

Mike ["AAAA"]
Bob ["ABAB","AAAB"]
Marvin ["AAAA","AABA","BBBB"]

非常感谢!

标签: javascript

解决方案


如评论中所述,您似乎已经尝试了一些解决问题的方法。

您可以尝试以下解决方案

  • 使用Array.reduce将数组转换为具有keys名称序列数组value的对象
  • reduce函数中,检查名称是否存在于结果对象中。如果存在,则将序列连接到它(使用扩展语法),否则添加一个带有序列的数组的新条目。

let input = [{name:'Mike',sequence:'AAAA',},{name:'Bob',sequence:'ABAB',},{name:'Bob',sequence:'AAAB',},{name:'Marvin',sequence:'AAAA',},{name:'Marvin',sequence:'AABA',},{name:'Marvin',sequence:'BBBB',}];
let result = input.reduce((a, {name, sequence}) => Object.assign(a, {[name] : a[name] ? [...a[name], sequence]: [sequence]}), {});
console.log(result);


推荐阅读