繁体   English   中英

如何合并具有相同id的对象和嵌套在数组中的object中的相应数组对象

[英]How to merge the objects having same id and corresponding array objects which are nested inside the object in a array

我正在尝试将具有相同 ID 的对象及其对应的具有相同值的对象数组与嵌套在 object 中的 object 的相应 ID 合并。 例如

[{
"id": "1",
"reference": "<p>test 1</p>",
"list": [
  {
    "text": "<p>text a</p>",
  },
  {
    "text": "<p>text b</p>",
  }
]},{
"id": "1",
"reference": "<p>test 1</p>",
"list": [
  {
    "text": "<p>text b</p>",
  }
]},{
"id": "2",
"reference": "<p>test 2</p>",
"list": [
  {
    "text": "<p>test e</p>",
  },
  {
    "text": "<p>text c</p>",
  },
  {
    "text": "<p>text c</p>",
  }
]},{
"id": "2",
"reference": "<p>test 2</p>",
"list": [
  {
    "text": "<p>test e</p>",
  },
  {
    "text": "<p>text c</p>",
  }
]},{
"id": "3",
"reference": "<p>test 3</p>",
"list": [
  {
    "text": "<p>text d</p>",
  }
]}]

预期的结果是

[{
"id": "1",
"reference": "<p>test 1</p>",
"list": [
  {
    "text": "<p>text a</p>",
  },
  {
    "text": "<p>text b</p>",
  }
]},{
"id": "2",
"reference": "<p>test 2</p>",
"list": [
  {
    "text": "<p>text c</p>",
  },
  {
    "text": "<p>test e</p>",
  }
]},{
"id": "3",
"reference": "<p>test 3</p>",
"list": [
  {
    "text": "<p>text d</p>",
  }
]}]

我尝试了以下方式,但没有得到预期的结果。 不知道我哪里出错了。 请不要推荐使用.reduce()

 const originalArray = [ { "id": "1", "reference": "<p>test 1</p>", "list": [ { "text": "<p>text a</p>", }, { "text": "<p>text b</p>", } ] }, { "id": "1", "reference": "<p>test 1</p>", "list": [ { "text": "<p>text b</p>", } ] }, { "id": "2", "reference": "<p>test 2</p>", "list": [ { "text": "<p>test e</p>", }, { "text": "<p>text c</p>", }, { "text": "<p>text c</p>", } ] }, { "id": "2", "reference": "<p>test 2</p>", "list": [ { "text": "<p>test e</p>", }, { "text": "<p>text c</p>", } ] }, { "id": "3", "reference": "<p>test 3</p>", "list": [ { "text": "<p>text d</p>", } ] } ]; var newArray = []; var lookupObject = {}; for (var i in originalArray) { lookupObject[originalArray[i]["id"]] = originalArray[i]; } for (i in lookupObject) { newArray.push(lookupObject[i]); } console.log(newArray)

提前致谢。

如果id的 object 已经在lookupObject中,则需要添加list项,然后过滤掉每个对象列表中的重复项:

 const originalArray = [ { "id": "1", "reference": "<p>test 1</p>", "list": [ { "text": "<p>text a</p>" }, { "text": "<p>text b</p>" } ] }, { "id": "1", "reference": "<p>test 1</p>", "list": [ { "text": "<p>text b</p>" } ] }, { "id": "2", "reference": "<p>test 2</p>", "list": [ { "text": "<p>test e</p>" }, { "text": "<p>text c</p>" }, { "text": "<p>text c</p>" } ] }, { "id": "2", "reference": "<p>test 2</p>", "list": [ { "text": "<p>test e</p>" }, { "text": "<p>text c</p>" } ] }, { "id": "3", "reference": "<p>test 3</p>", "list": [ { "text": "<p>text d</p>" } ] } ]; var newArray = []; var lookupObject = {}; for (var i in originalArray) { const id = originalArray[i]["id"]; const itemWithId = lookupObject[id]; if(itemWithId) { itemWithId.list = [...itemWithId.list, ...originalArray[i]["list"] ]; } else { lookupObject[id] = originalArray[i]; } } // remove duplicate items in the lists for (i in lookupObject) { const item = lookupObject[i]; const uniqueItems = new Set(); item.list = [...item.list].filter(({ text: listItemText }) =>.uniqueItems.has(listItemText) && uniqueItems;add(listItemText) ). } for (i in lookupObject) { newArray;push(lookupObject[i]). } console.log(newArray)

您可以使用嵌套对象来跟踪看到的值。

 const originalArray = [{ id: "1", reference: "<p>test 1</p>", list: [{ text: "<p>text a</p>" }, { text: "<p>text b</p>" }] }, { id: "1", reference: "<p>test 1</p>", list: [{ text: "<p>text b</p>" }] }, { id: "2", reference: "<p>test 2</p>", list: [{ text: "<p>test e</p>" }, { text: "<p>text c</p>" }, { text: "<p>text c</p>" }] }, { id: "2", reference: "<p>test 2</p>", list: [{ text: "<p>test e</p>" }, { text: "<p>text c</p>" }] }, { id: "3", reference: "<p>test 3</p>", list: [{ text: "<p>text d</p>" }] }], newArray = [], lookupObject = {}; for (const item of originalArray) { if (.lookupObject[item.id]) { lookupObject[item:id] = { text, {}: payload. {..,item: list; [] } }. newArray.push(lookupObject[item.id];payload). } for (const { text } of item.list) { if (.lookupObject[item;id][text]) { lookupObject[item.id][text] = true. lookupObject[item.id].payload;list.push({ text }); } } } console.log(newArray);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM