Javascript 通过深嵌套键映射副本后获取整个对象数组
我有一个巨大的嵌套对象数组,我想过滤并删除由深嵌套键Javascript 通过深嵌套键映射副本后获取整个对象数组,javascript,Javascript,我有一个巨大的嵌套对象数组,我想过滤并删除由深嵌套键uniqueId定义的重复项。通过以下映射,我只获得键uniqueId的值。但是我需要整个对象数组m JS var medis = [...new Map(m.map( o => [o['drugs'][0]['ingredient'].uniqueId, o['drugs'][0]['ingredient'].uniqueId])).values()]; 问题: 如何获取过滤后的数组m 在映射中是否可以只保留最后一个副本 感谢您的提示
uniqueId
定义的重复项。通过以下映射,我只获得键uniqueId
的值。但是我需要整个对象数组m
JS
var medis = [...new Map(m.map( o => [o['drugs'][0]['ingredient'].uniqueId, o['drugs'][0]['ingredient'].uniqueId])).values()];
问题:
m
感谢您的提示由于您没有提供示例数据,要准确地知道您想要什么有点困难,但这里有一些可能有用的方法。我没有在适当的位置减少数组,而是制作了一个新的映射
n
//var medis=[…新映射(m.Map(o=>[o['druges'][0]['component'].uniqueId,o['druges'][0]['component'].uniqueId])).values();
设m=[
{“毒品”:[
{‘成分’:{
'name':'first',
“uniqId”:1
}}
]},
{“毒品”:[
{‘成分’:{
“name”:“second”,
‘uniqId’:2
}}
]},
{“毒品”:[
{‘成分’:{
'name':'first-overwrited',
“uniqId”:1
}}
]},
]
设n=新映射();
m、 map(o=>{n[o['drugs'][0]['component'].uniqId]=o});
控制台日志(n)代码>确切地知道您想要什么有点困难,因为您没有提供示例数据,但这里有一些可能有效的方法。我没有在适当的位置减少数组,而是制作了一个新的映射n
//var medis=[…新映射(m.Map(o=>[o['druges'][0]['component'].uniqueId,o['druges'][0]['component'].uniqueId])).values();
设m=[
{“毒品”:[
{‘成分’:{
'name':'first',
“uniqId”:1
}}
]},
{“毒品”:[
{‘成分’:{
“name”:“second”,
‘uniqId’:2
}}
]},
{“毒品”:[
{‘成分’:{
'name':'first-overwrited',
“uniqId”:1
}}
]},
]
设n=新映射();
m、 map(o=>{n[o['drugs'][0]['component'].uniqId]=o});
控制台日志(n)代码>我宁愿使用存储唯一ID的方法。您可以使用而不是映射来进行筛选。在这里,您将验证集合是否包含要添加到累加器数组的对象键:
const uniqueKeys = new Set()
const medis = m.reduce((uniqueArray, o) => {
const key = o['drugs'][0]['ingredient'].uniqueId
if(uniqueKeys.has(key)) return uniqueArray
uniqueKeys.add(key)
uniqueArray.push(o)
return uniqueArray
},[])
注意:如果您想将复制的最后一个对象存储到数组中,您可以使用。我更愿意使用存储唯一ID。您可以使用而不是映射来进行筛选。在这里,您将验证集合是否包含要添加到累加器数组的对象键:
const uniqueKeys = new Set()
const medis = m.reduce((uniqueArray, o) => {
const key = o['drugs'][0]['ingredient'].uniqueId
if(uniqueKeys.has(key)) return uniqueArray
uniqueKeys.add(key)
uniqueArray.push(o)
return uniqueArray
},[])
注意:如果要将最后复制的每个对象存储到数组中,则可以使用。您正在创建一个键和值都是uniqueId的映射,是否要创建一个键为uniqueId、值为对象的映射?考虑看看像LADASH这样的库及其有效实现UNIQBY的方法的源代码(你不太远!):哦,是的,你是对的!这是一个错误!!!您正在创建一个映射,其中键和值都是uniqueId,您的意思是创建一个映射,其中键是uniqueId,值是对象吗?考虑看看像LADASH这样的库及其有效实现UNIQBY的方法的源代码(你不太远!):哦,是的,你是对的!这是一个错误!!!我认为这是第一个,而不是最后一个duplicates@ChrisLear是的,没错。我不确定这是否是他想要的第二个问题。如果使用reduceRight,则会存储最后一个而不是第一个。我补充了答案。谢谢我想这是第一个,而不是最后一个duplicates@ChrisLear是的,没错。我不确定这是否是他想要的第二个问题。如果使用reduceRight,则会存储最后一个而不是第一个。我补充了答案。非常感谢。