Javascript 自合并对象-lodash
我有一个目标:Javascript 自合并对象-lodash,javascript,list,object,lodash,Javascript,List,Object,Lodash,我有一个目标: obj1 = [{ "accId": 23, "sName" : "qw" }, { "accId": 23, "sName": "as" }, { "accId":24, "sName": "we" } ] 我想使用lodash将此对象列表自合并为: re
obj1 = [{
"accId": 23,
"sName" : "qw"
},
{
"accId": 23,
"sName": "as"
},
{
"accId":24,
"sName": "we"
}
]
我想使用lodash将此对象列表自合并为:
result = [{
"accId": 23,
"sName" : ["qw","as"]
},
{
"accId":24,
"sName": ["we"]
}
]
我尝试使用纯javascript和for循环,但它似乎效率很低。我也尝试了一些lodash函数,但没有找到一个完美的匹配。
我还考虑过将对象列表拆分为单独的列表,每个列表中有一个对象,然后使用u.merge进行合并。但是我不知道是否有办法分割对象列表。Lodash允许您指定一个迭代对象,该迭代对象被传递给数组的每个成员。结果数组相对于该迭代对象的返回值是唯一的
让数组=[{
账号:23,
sName:qw
},
{
账号:23,
斯奈姆:就像
},
{
账号:24,
斯奈姆:我们
}
]
让uniqArray=\ uqbyarray,o=>o.accId;
console.loguniqArray;
Lodash允许您指定一个iteratee,该iteratee被传递给数组的每个成员。结果数组相对于该迭代对象的返回值是唯一的
让数组=[{
账号:23,
sName:qw
},
{
账号:23,
斯奈姆:就像
},
{
账号:24,
斯奈姆:我们
}
]
让uniqArray=\ uqbyarray,o=>o.accId;
console.loguniqArray;
您可以使用如下自定义reduce函数:
function merge (data) {
const values = data.reduce((acum, item) => {
const key = item.accId
let cached = acum[key]
if (cached) {
cached.sName.push(item.sName)
} else {
cached = {
"accId": key,
"sName": [item.sName]
}
}
return { ...acum, [key]: cached }
}, {})
return Object.values(values)
}
此函数将解决您的问题。您可以使用如下自定义reduce函数:
function merge (data) {
const values = data.reduce((acum, item) => {
const key = item.accId
let cached = acum[key]
if (cached) {
cached.sName.push(item.sName)
} else {
cached = {
"accId": key,
"sName": [item.sName]
}
}
return { ...acum, [key]: cached }
}, {})
return Object.values(values)
}
此函数将解决您的问题。使用lodash,您可以使用u.flow生成一个函数,该函数首先将具有相同accId的项目分组,然后映射每个组并生成一个新对象,其中包含该组收集的sName值:
const{flow,particle:pr,groupBy,map,head}=_
常数fn=流量
prgroupBy,'accId',
prmap,vs=>{…headvs,sName:mapvs,'sName'}
常量数组=[{accId:23,sName:qw},{accId:23,sName:as},{accId:24,sName:we}]
const result=fn数组
console.logresult;
使用lodash,您可以使用u0.flow生成一个函数,该函数首先对具有相同accId的项目进行分组,然后映射每个组并生成一个新对象,其中包含该组收集的sName值:
const{flow,particle:pr,groupBy,map,head}=_
常数fn=流量
prgroupBy,'accId',
prmap,vs=>{…headvs,sName:mapvs,'sName'}
常量数组=[{accId:23,sName:qw},{accId:23,sName:as},{accId:24,sName:we}]
const result=fn数组
console.logresult;
谢谢。但这并没有提供我想要的输出。谢谢:。但这并没有给我想要的输出。