Javascript 如何合并数组中的重复项

Javascript 如何合并数组中的重复项,javascript,arrays,Javascript,Arrays,我几乎没有记录,我想将它们合并到一个数组中。以下是一些示例数据: var data = [{ name:'book1', category: "nurse", location: "US edition" }, { name:'book2', category: "nurse", location: "US edition" }, { name:'book3', category: "patient", location:

我几乎没有记录,我想将它们合并到一个数组中。以下是一些示例数据:

var data = [{
    name:'book1',
    category: "nurse",
    location: "US edition"
},
{
    name:'book2',
    category: "nurse",
    location: "US edition"
},
{
    name:'book3',
    category: "patient",
    location: "CAN edition"
}]
我对最终结果的看法是:

var data = [{
    [name:'book1',name:'book2'],
    category: "nurse",
    location: "US edition"
},
{
    name:'book3',
    category: "patient",
    location: "CAN edition"
}]
我试图合并这些记录,但无法找到并合并这些名称。以下是我到目前为止编写的代码:

 var data = [
    {
        name:'book1',
        category: "nurse",
        location: "US edition"
    },
    {
        name:'book2',
        category: "nurse",
        location: "US edition"
    },
    {
        name:'book3',
        category: "patient",
        location: "CAN edition"
    }
],
i = 0,
j = data.length - 1,
current;

for (;i < data.length; i++) {
    current = data[i];
    for (;j > i; j--) {
        if (current.asset === data[j].asset && current.location === data[j].location) {
            if (Array.isArray(current.data)) {
                current.data = current.data.concat([data[j].data]);
            } else {
                current.data = [].concat([data[j].data, current.data]);
            }
            data.splice(j, 1);
        }
    }
} 

console.log(data);
var数据=[
{
名称:'book1',
类别:“护士”,
地点:“美国版”
},
{
名称:'book2',
类别:“护士”,
地点:“美国版”
},
{
名称:'book3',
类别:“病人”,
地点:“罐头版”
}
],
i=0,
j=数据长度-1,
现在的
对于(;ii;j--){
if(current.asset==数据[j]。资产和当前.location==数据[j]。位置){
if(Array.isArray(current.data)){
current.data=current.data.concat([data[j].data]);
}否则{
current.data=[].concat([data[j].data,current.data]);
}
数据拼接(j,1);
}
}
} 
控制台日志(数据);

有人能给我建议一种将数据合并到数组中的方法吗?

array.prototype.reduce()
非常适合这些工作

var数据=[
{名称:'book1',
类别:“护士”,
地点:“美国版”
},
{
名称:'book2',
类别:“护士”,
地点:“美国版”
},
{名称:'book3',
类别:“病人”,
地点:“罐头版”
}
],
reduced=data.reduce((p,c)=>{var f=p.find(e=>e.category==c.category&&e.location==c.location);
!!f?f.name.push(c.name)
:p.push({name:[c.name],类别:c.category,位置:c.location});
返回p;},[]);

document.write(“+JSON.stringify(reduced,null,2)+”)
Array.prototype.reduce()
非常适合这些工作

var数据=[
{名称:'book1',
类别:“护士”,
地点:“美国版”
},
{
名称:'book2',
类别:“护士”,
地点:“美国版”
},
{名称:'book3',
类别:“病人”,
地点:“罐头版”
}
],
reduced=data.reduce((p,c)=>{var f=p.find(e=>e.category==c.category&&e.location==c.location);
!!f?f.name.push(c.name)
:p.push({name:[c.name],类别:c.category,位置:c.location});
返回p;},[]);

document.write(“+JSON.stringify(reduced,null,2)+”)取决于您希望如何对它们进行分组。如果按
类别对其进行分组
,则
名称
应为数组,
名称:['book1','book2']
取决于您希望如何对其进行分组。如果您按
类别对其进行分组
,那么
名称
应该是数组,
名称:['book1','book2']
提出reduce解决方案做得很好!您可以将三元逻辑修改为
!!F(Array.isArray(f.name)?f.name.push(c.name):f.name=[f.name,c.name]):p.push({name:c.name,category:c.category,location:c.location})这样它就不会在唯一的类别/位置组合中添加方括号。@timolawl这就是我要找的。。感谢提出reduce解决方案的出色工作!您可以将三元逻辑修改为
!!F(Array.isArray(f.name)?f.name.push(c.name):f.name=[f.name,c.name]):p.push({name:c.name,category:c.category,location:c.location})这样它就不会在唯一的类别/位置组合中添加方括号。@timolawl这就是我要找的。。谢谢