Javascript 使用lodash将相同的键转换为一个键并创建它的数组';s值

Javascript 使用lodash将相同的键转换为一个键并创建它的数组';s值,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我想转换beloinput.json文件。我想将所有类别键合并为一个,并创建名称数组(如果匹配的话) 我正在寻找一个只使用lodash或只使用JS/ES的解决方案* 已经有人问过类似的问题,但大多数问题都涉及两个不同的json。请解释一下解决办法 [ { "category": "Salman Khan", "names": "Bhaijan" }, { "category": "Salman Khan",

我想转换belo
input.json
文件。我想将所有类别键合并为一个,并创建名称数组(如果匹配的话)

我正在寻找一个只使用lodash或只使用JS/ES的解决方案*

已经有人问过类似的问题,但大多数问题都涉及两个不同的json。请解释一下解决办法

[
    {
        "category": "Salman Khan",
        "names": "Bhaijan"
    },
    {
        "category": "Salman Khan",
        "names": "Sallu"
    },
    {
        "category": "Salman Khan",
        "names": "Dabangg Khan"
    },
    {
        "category": "Salman Khan",
        "names": "Sultan"
    },
    {
        "category": "Shahrukh Khan",
        "names": "SRK"
    },
    {
        "category": "Shahrukh Khan",
        "names": "King Khan"
    },
    {
        "category": "Akshay Kumar",
        "names": "Khiladi"
    },
    {
        "category": "Akshay Kumar",
        "names": "Akki"
    },
    {
        "category": "Aamir Khan",
        "names": "A.K."
    },
    {
        "category": "Aamir Khan",
        "names": "Mr. Perfectionist"
    },
    {
        "category": "Priyanka Chopra",
        "names": "Piggy Chops"
    },
    {
        "category": "Kareena Kapoor",
        "names": "Bebo"
    }
]
预期的json

[
    {
        "category": "Salman Khan",
        "names": ["Bhaijan", "Sallu", "Dabangg Khan", "Sultan"]
    },
    {
        "category": "Shahrukh Khan",
        "names": ["SRK", "King Khan"]
    },
    {
        "category": "Akshay Kumar",
        "names": ["Khiladi", "Akki", "A.K."]
    },
    {
        "category": "Aamir Khan",
        "names": ["Mr. Perfectionist"]
    },
    {
        "category": "Priyanka Chopra",
        "names": ["Piggy Chops"]
    },
    {
        "category": "Kareena Kapoor",
        "names": ["Bebo"]
    }
]

使用函数迭代数组,并检查是否已经存在具有当前项名称的对象。如果是,只需将名称推入其中,如果不是,则使用当前项名称创建一个新对象

const数据=[
{
“类别”:“萨尔曼·汗”,
“姓名”:“Bhaijan”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“Sallu”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“大邦汗”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“苏丹”
},
{
“类别”:“Shahrukh Khan”,
“名称”:“SRK”
},
{
“类别”:“Shahrukh Khan”,
“姓名”:“可汗国王”
},
{
“类别”:“Akshay Kumar”,
“姓名”:“Khiladi”
},
{
“类别”:“Akshay Kumar”,
“姓名”:“阿克基”
},
{
“类别”:“阿米尔·汗”,
“名称”:“A.K.”
},
{
“类别”:“阿米尔·汗”,
“姓名”:“完美主义者先生”
},
{
“类别”:“Priyanka Chopra”,
“姓名”:“猪排”
},
{
“类别”:“卡丽娜·卡普尔”,
“姓名”:“Bebo”
}
]
const arr=数据减少((附件,项目)=>{
const found=acc.find(i=>i.category==item.category);
如果(找到){
找到.names.push(item.names);
}否则{
acc.push({category:item.category,name:[item.names]})
}
返回acc;
}, []);
控制台日志(arr)
您可以使用,通过
类别
键对集合中的每个对象进行分组,然后将每个组转换为您喜欢的数组格式

var result = _(data)
  .groupBy('category')
  .map(function(group, category) {
    return {
      category: category,
      names: _.map(group, 'names')
    };
  })
  .value();
var数据=[
{
“类别”:“萨尔曼·汗”,
“姓名”:“Bhaijan”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“Sallu”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“大邦汗”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“苏丹”
},
{
“类别”:“Shahrukh Khan”,
“名称”:“SRK”
},
{
“类别”:“Shahrukh Khan”,
“姓名”:“可汗国王”
},
{
“类别”:“Akshay Kumar”,
“姓名”:“Khiladi”
},
{
“类别”:“Akshay Kumar”,
“姓名”:“阿克基”
},
{
“类别”:“阿米尔·汗”,
“名称”:“A.K.”
},
{
“类别”:“阿米尔·汗”,
“姓名”:“完美主义者先生”
},
{
“类别”:“Priyanka Chopra”,
“姓名”:“猪排”
},
{
“类别”:“卡丽娜·卡普尔”,
“姓名”:“Bebo”
}
];
var结果=(数据)
.groupBy(“类别”)
.map(功能(组、类别){
返回{
类别:类别,,
名称:\ u.map(组“名称”)
};
})
.value();
控制台日志(结果)
。作为控制台包装{最小高度:100%;顶部:0}

以下是使用reduce方法的可能解决方案

const数据=[
{
“类别”:“萨尔曼·汗”,
“姓名”:“Bhaijan”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“Sallu”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“大邦汗”
},
{
“类别”:“萨尔曼·汗”,
“姓名”:“苏丹”
},
{
“类别”:“Shahrukh Khan”,
“名称”:“SRK”
},
{
“类别”:“Shahrukh Khan”,
“姓名”:“可汗国王”
},
{
“类别”:“Akshay Kumar”,
“姓名”:“Khiladi”
},
{
“类别”:“Akshay Kumar”,
“姓名”:“阿克基”
},
{
“类别”:“阿米尔·汗”,
“名称”:“A.K.”
},
{
“类别”:“阿米尔·汗”,
“姓名”:“完美主义者先生”
},
{
“类别”:“Priyanka Chopra”,
“姓名”:“猪排”
},
{
“类别”:“卡丽娜·卡普尔”,
“姓名”:“Bebo”
}
];
const resultObject=data.reduce((acc,value)=>{
acc[value.category]=acc[value.category]| |[];
acc[value.category].push(value.names);
返回acc;
},{});
const results=Object.keys(resultObject.map)(key=>({category:key,names:resultObject[key]}));

控制台日志(结果)谢谢你的快速回答,但是你能解释最后一个空参数做什么吗它是
reduce
函数的签名。我只是传递一个空数组作为它内部的
acc
的起始值