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