JavaScript将两个多维数组合并为唯一数组
我正在尝试对如下所示的数据进行排序:JavaScript将两个多维数组合并为唯一数组,javascript,ecmascript-6,merge,lodash,unique,Javascript,Ecmascript 6,Merge,Lodash,Unique,我正在尝试对如下所示的数据进行排序: { "Params": [ ["section", "North"], ["monitor", "Single Monitor"], ["section", "North"], ["monitor", "Dual Mon
{
"Params": [
["section", "North"],
["monitor", "Single Monitor"],
["section", "North"],
["monitor", "Dual Monitor"]
]
}
{
"section": [
"North"
],
"monitor": [
"Single Monitor",
"Dual Monitor"
]
}
变成这样的东西:
{
"Params": [
["section", "North"],
["monitor", "Single Monitor"],
["section", "North"],
["monitor", "Dual Monitor"]
]
}
{
"section": [
"North"
],
"monitor": [
"Single Monitor",
"Dual Monitor"
]
}
但我目前遇到了一些问题,我尝试了一些不同的方法,比如在循环中将数组连接在一起,或者甚至使用lodash的uniq函数,但每次我都得到了不想要的结果
提前感谢您的帮助您可以使用
array聚合数组。reduce
:
让obj={
“参数”:[
[“节”、“北”],
[“监视器”、“单监视器”],
[“节”、“北”],
[“监视器”、“双监视器”]
]
}
让结果=对象参数减少((acc,cur)=>{
让[key,value]=cur;
如果(!acc[键]){
acc[键]=[];
}
如果(!acc[key]。包括(值)){
acc[键]。推送(值);
}
返回acc;
}, {});
控制台日志(结果)
您可以使用数组聚合数组。reduce
:
让obj={
“参数”:[
[“节”、“北”],
[“监视器”、“单监视器”],
[“节”、“北”],
[“监视器”、“双监视器”]
]
}
让结果=对象参数减少((acc,cur)=>{
让[key,value]=cur;
如果(!acc[键]){
acc[键]=[];
}
如果(!acc[key]。包括(值)){
acc[键]。推送(值);
}
返回acc;
}, {});
控制台日志(结果)代码>此处需要执行的操作数。您可以使用reduce
对关键数据进行分组。因为您只有键值对数组格式,所以在reduce中,我用指示键和值的[k,v]
对其进行了分解。然后,为了删除重复值,我使用了Set
var数据={
“参数”:[
[“节”、“北”],
[“监视器”、“单监视器”],
[“节”、“北”],
[“监视器”、“双监视器”]
]
};
var result=data.Params.reduce((a[k,v])=>(a[k]=[…(a[k]|[]),v],a[k]=[…新集合(a[k])],a),{});
控制台日志(结果)代码>此处需要执行的操作数。您可以使用reduce
对关键数据进行分组。因为您只有键值对数组格式,所以在reduce中,我用指示键和值的[k,v]
对其进行了分解。然后,为了删除重复值,我使用了Set
var数据={
“参数”:[
[“节”、“北”],
[“监视器”、“单监视器”],
[“节”、“北”],
[“监视器”、“双监视器”]
]
};
var result=data.Params.reduce((a[k,v])=>(a[k]=[…(a[k]|[]),v],a[k]=[…新集合(a[k])],a),{});
控制台日志(结果)代码>您可以使用.groupBy()
的.head()
(每对中的第一项)对项目进行分组。然后使用.mapValues()
迭代每个组,将其映射以获取.last()
项,并使用.uniq()
仅获取唯一值:
const data={“Params”:[[“区段”、“北部”]、[“监视器”、“单监视器”]、[“区段”、“北部”]、[“监视器”、“双监视器”]};
const result=\映射值(
_.groupBy(data.Params,u.head),//按第一项分组
g=>q.uniq(q.map(g,q.last))//将每个组映射到最后一个项,并获取唯一值
);
控制台日志(结果)代码>
您可以使用\uu.groupBy()
的\uu.head()
(每对中的第一项)对项目进行分组。然后使用.mapValues()
迭代每个组,将其映射以获取.last()
项,并使用.uniq()
仅获取唯一值:
const data={“Params”:[[“区段”、“北部”]、[“监视器”、“单监视器”]、[“区段”、“北部”]、[“监视器”、“双监视器”]};
const result=\映射值(
_.groupBy(data.Params,u.head),//按第一项分组
g=>q.uniq(q.map(g,q.last))//将每个组映射到最后一个项,并获取唯一值
);
控制台日志(结果)代码>
您可以按如下方式将方法转换为函数
让obj={
“参数”:[
[“节”、“北”],
[“监视器”、“单监视器”],
[“节”、“北”],
[“监视器”、“双监视器”]
]
};
常数res=对象参数reduce((acc,[key,val])=>{
acc[键]=acc[键]| |[];
如果(!acc[key]。包括(val)){
acc[键]。推送(val);
}
返回acc;
}, {});
控制台日志(res)代码>您可以按如下方式将方法转换为函数
让obj={
“参数”:[
[“节”、“北”],
[“监视器”、“单监视器”],
[“节”、“北”],
[“监视器”、“双监视器”]
]
};
常数res=对象参数reduce((acc,[key,val])=>{
acc[键]=acc[键]| |[];
如果(!acc[key]。包括(val)){
acc[键]。推送(val);
}
返回acc;
}, {});
控制台日志(res)代码>“我尝试了一些不同的方法…”-请添加您最有希望的方法,我们将尝试帮助您。“我尝试了一些不同的方法…”-请添加您最有希望的方法,我们将尝试帮助您。为什么查找单个值<代码>包含
会更好。为什么要查找单个值<代码>包含
会更好。