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这就是我要找的。。谢谢