Javascript 如何从嵌套在数组对象中的数组中删除重复的对象值?

Javascript 如何从嵌套在数组对象中的数组中删除重复的对象值?,javascript,Javascript,我有如下所示的数组结构 [ { “id”:“cbdfc96a-c788-45cd-bdd1-7d573cc8c474”, “refId”:“1”, “参考文献”:“1646皮肤病研究杂志(2017年),第137卷”, “名单”:[ { “文本”:“注释1”, “id”:“e9c207ae-3d08-4eb2-94d1-b6ae713862d3” }, { “文本”:“注释1”, “id”:“e1486639-aa46-4513-992b-17d8d66f06c8” } ] }, { “id”:

我有如下所示的数组结构

[
{
“id”:“cbdfc96a-c788-45cd-bdd1-7d573cc8c474”,
“refId”:“1”,
“参考文献”:“1646皮肤病研究杂志(2017年),第137卷”,
“名单”:[
{
“文本”:“注释1

”, “id”:“e9c207ae-3d08-4eb2-94d1-b6ae713862d3” }, { “文本”:“注释1

”, “id”:“e1486639-aa46-4513-992b-17d8d66f06c8” } ] }, { “id”:“90b187ab-26ef-45c0-a6a0-bf7dcfde660f”, “refId”:“2”, “参考文献”:“ZK Jabbar-Lopez等。银屑病生物治疗方案的评估”

”, “名单”:[ { “文本”:“注释2

”, “id”:“fc430895-912a-4e4b-884c-f08600e06ec8” }, { “文本”:“注释2 3

”, “id”:“a1296b1f-530e-4e1b-b2d0-f97bba192a1a” }, { “文本”:“注释2 3

”, “id”:“090737d5-48ac-4e3f-973d-9e1de206252b” }, { “文本”:“注释2

”, “id”:“6d5f89be-305e-4751-a7ca-75d9b0f2057e” } ] }, { “id”:“e8c3a958-7fa4-40e1-a83a-44c85ebb05a7”, “refId”:“3”, “参考文献”:“表2.相对治疗排名(12至16周时的结果)

”, “名单”:[ { “文本”:“注释3

”, “id”:“f9082af8-3c2f-477b-b113-a96f320415d1” }, { “文本”:“注释3

”, “id”:“2d7e65b8-e516-40bf-8957-c0fb4b819aa9” } ] } ]
解决方法:


请参阅沙盒以供参考:

您想从
列表
属性中删除
文本
重复值。要清楚的是,这些对象实际上是唯一的,因为每个对象都有一个唯一的id

解决此问题的一种方法是创建
映射
,以存储每个对象的唯一文本值。然后过滤
列表
,验证
地图中是否包含
文本
。如果包含它,则返回false,否则将
文本添加到
映射中,并返回true:

// data here is your array
const filteredData = data.map(item => {
  const includedText = new Map()
  const list = item.list.filter(content => {
    if (includedText.has(content.text)) return false
    includedText.set(content.text)
    return true
  })

  return { ...item, list }
})

console.log(filteredData)

假设要与列表中的文本合并,则可以使用列表存储处理后的元素。下面是同样的代码

const input = [
  {
    "id": "cbdfc96a-c788-45cd-bdd1-7d573cc8c474",
    "refId": "1",
    "reference": "<p>1646 Journal of Investigative Dermatology ( 2017 ) , Volume 137</p>",
    "list": [
      {
        "text": "<p>Annot 1</p>",
        "id": "e9c207ae-3d08-4eb2-94d1-b6ae713862d3"
      },
      {
        "text": "<p>Annot 1</p>",
        "id": "e1486639-aa46-4513-992b-17d8d66f06c8"
      }
    ]
  },
  {
    "id": "90b187ab-26ef-45c0-a6a0-bf7dcfde660f",
    "refId": "2",
    "reference": "<p>ZK Jabbar - Lopez et al . Evaluation of Biologic Therapy Options for Psoriasis</p>",
    "list": [
      {
        "text": "<p>Annot 2</p>",
        "id": "fc430895-912a-4e4b-884c-f08600e06ec8"
      },
      {
        "text": "<p>Annot 2 3</p>",
        "id": "a1296b1f-530e-4e1b-b2d0-f97bba192a1a"
      },
      {
        "text": "<p>Annot 2 3</p>",
        "id": "090737d5-48ac-4e3f-973d-9e1de206252b"
      },
      {
        "text": "<p>Annot 2</p>",
        "id": "6d5f89be-305e-4751-a7ca-75d9b0f2057e"
      }
    ]
  },
  {
    "id": "e8c3a958-7fa4-40e1-a83a-44c85ebb05a7",
    "refId": "3",
    "reference": "<p>Table 2. Relative treatment rankings ( outcomes at 12 to 16 wk )</p>",
    "list": [
      {
        "text": "<p>Annot 3</p>",
        "id": "f9082af8-3c2f-477b-b113-a96f320415d1"
      },
      {
        "text": "<p>Annot 3</p>",
        "id": "2d7e65b8-e516-40bf-8957-c0fb4b819aa9"
      }
    ]
  }
]
//Solution....
input.forEach(function(i) {
    let processed = [];
    const newList = [];
    i.list.forEach(function(l) {
      if( processed.indexOf(l.text) < 0 ) { //id not in list
        newList.push(l);
        processed.push(l.text);
      }
    });
    i.list = newList;
});


console.log(input);
const输入=[
{
“id”:“cbdfc96a-c788-45cd-bdd1-7d573cc8c474”,
“refId”:“1”,
“参考文献”:“1646皮肤病研究杂志(2017年),第137卷”,
“名单”:[
{
“文本”:“注释1

”, “id”:“e9c207ae-3d08-4eb2-94d1-b6ae713862d3” }, { “文本”:“注释1

”, “id”:“e1486639-aa46-4513-992b-17d8d66f06c8” } ] }, { “id”:“90b187ab-26ef-45c0-a6a0-bf7dcfde660f”, “refId”:“2”, “参考文献”:“ZK Jabbar-Lopez等。银屑病生物治疗方案的评估”

”, “名单”:[ { “文本”:“注释2

”, “id”:“fc430895-912a-4e4b-884c-f08600e06ec8” }, { “文本”:“注释2 3

”, “id”:“a1296b1f-530e-4e1b-b2d0-f97bba192a1a” }, { “文本”:“注释2 3

”, “id”:“090737d5-48ac-4e3f-973d-9e1de206252b” }, { “文本”:“注释2

”, “id”:“6d5f89be-305e-4751-a7ca-75d9b0f2057e” } ] }, { “id”:“e8c3a958-7fa4-40e1-a83a-44c85ebb05a7”, “refId”:“3”, “参考文献”:“表2.相对治疗排名(12至16周时的结果)

”, “名单”:[ { “文本”:“注释3

”, “id”:“f9082af8-3c2f-477b-b113-a96f320415d1” }, { “文本”:“注释3

”, “id”:“2d7e65b8-e516-40bf-8957-c0fb4b819aa9” } ] } ] //解决方案。。。。 input.forEach(函数(i){ 让处理=[]; 常量newList=[]; i、 list.forEach(函数(l){ if(processed.indexOf(l.text)<0){//id不在列表中 newList.push(l); 已处理。推送(l.text); } }); i、 列表=新列表; }); 控制台日志(输入);
如果没有任何npm包装,我们能否实现这一目标?。
const input = [
  {
    "id": "cbdfc96a-c788-45cd-bdd1-7d573cc8c474",
    "refId": "1",
    "reference": "<p>1646 Journal of Investigative Dermatology ( 2017 ) , Volume 137</p>",
    "list": [
      {
        "text": "<p>Annot 1</p>",
        "id": "e9c207ae-3d08-4eb2-94d1-b6ae713862d3"
      },
      {
        "text": "<p>Annot 1</p>",
        "id": "e1486639-aa46-4513-992b-17d8d66f06c8"
      }
    ]
  },
  {
    "id": "90b187ab-26ef-45c0-a6a0-bf7dcfde660f",
    "refId": "2",
    "reference": "<p>ZK Jabbar - Lopez et al . Evaluation of Biologic Therapy Options for Psoriasis</p>",
    "list": [
      {
        "text": "<p>Annot 2</p>",
        "id": "fc430895-912a-4e4b-884c-f08600e06ec8"
      },
      {
        "text": "<p>Annot 2 3</p>",
        "id": "a1296b1f-530e-4e1b-b2d0-f97bba192a1a"
      },
      {
        "text": "<p>Annot 2 3</p>",
        "id": "090737d5-48ac-4e3f-973d-9e1de206252b"
      },
      {
        "text": "<p>Annot 2</p>",
        "id": "6d5f89be-305e-4751-a7ca-75d9b0f2057e"
      }
    ]
  },
  {
    "id": "e8c3a958-7fa4-40e1-a83a-44c85ebb05a7",
    "refId": "3",
    "reference": "<p>Table 2. Relative treatment rankings ( outcomes at 12 to 16 wk )</p>",
    "list": [
      {
        "text": "<p>Annot 3</p>",
        "id": "f9082af8-3c2f-477b-b113-a96f320415d1"
      },
      {
        "text": "<p>Annot 3</p>",
        "id": "2d7e65b8-e516-40bf-8957-c0fb4b819aa9"
      }
    ]
  }
]
//Solution....
input.forEach(function(i) {
    let processed = [];
    const newList = [];
    i.list.forEach(function(l) {
      if( processed.indexOf(l.text) < 0 ) { //id not in list
        newList.push(l);
        processed.push(l.text);
      }
    });
    i.list = newList;
});


console.log(input);