Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过深嵌套键映射副本后获取整个对象数组_Javascript - Fatal编程技术网

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,则会存储最后一个而不是第一个。我补充了答案。非常感谢。