Преобразование дублированного значения объекта в массив Javascript

Я потратил пару часов, чтобы найти способ обработки этого массива объектов:

[
  {
    "value": "foo01",
    "Diagnosis_Code": "Tidak ada",
    "name": "bar"
  },
  {
    "value": "foo02",
    "Diagnosis_Code": "Tidak ada",
    "name": "bar"
  },
  {
    "value": "foo03",
    "Diagnosis_Code": "Tidak ada",
    "name": "bar"
  },
  {
    "value": "foo04",
    "Diagnosis_Code": "Tidak ada",
    "name": "bar"
  },
  {
    "value": "val1",
    "Diagnosis_Code": "foo03",
    "name": "bar2"
  },
  {
    "value": "val2",
    "Diagnosis_Code": "foo01",
    "name": "bar2"
  },
  {
    "value": "val3",
    "Diagnosis_Code": "foo02",
    "name": "bar2"
  },
  {
    "value": "val3",
    "Diagnosis_Code": "foo04",
    "name": "bar2"
  },
  {
    "value": "val1",
    "Diagnosis_Code": "foo01",
    "name": "bar3"
  },
  {
    "value": "val2",
    "Diagnosis_Code": "foo03",
    "name": "bar3"
  },
  {
    "value": "val2",
    "Diagnosis_Code": "foo04",
    "name": "bar3"
  },
  {
    "value": "val3",
    "Diagnosis_Code": "foo02",
    "name": "bar3"
  },
  {
    "value": "val1",
    "Diagnosis_Code": "foo01",
    "name": "bar4"
  },
  {
    "value": "val1",
    "Diagnosis_Code": "foo02",
    "name": "bar4"
  },
  {
    "value": "val1",
    "Diagnosis_Code": "foo04",
    "name": "bar4"
  },
  {
    "value": "val2",
    "Diagnosis_Code": "foo03",
    "name": "bar4"
  }
]

Мой ожидаемый JSON выглядит примерно так:

[
  {
    "name":"bar",
    "value":[
      {
        "value": "foo01",
        "Diagnosis_Code": ["Tidak ada"],
        "name": "bar",
      },
      {
        "value": "foo02",
        "Diagnosis_Code": ["Tidak ada"],
        "name": "bar",
      },
      {
        "value": "foo03",
        "Diagnosis_Code": ["Tidak ada"],
        "name": "bar",
      },
      {
        "value": "foo04",
        "Diagnosis_Code": ["Tidak ada"],
        "name": "bar",
      }
    ]
  },
  {
    "name": "bar2",
    "value": [
      {
        "value": "val1",
        "Diagnosis_Code": ["foo03"],
        "name": "bar2",
      },
      {
        "value": "val2",
        "Diagnosis_Code": ["foo01"],
        "name": "bar2",
      },
      {
        "value": "val3",
        "Diagnosis_Code": ["foo02", "foo04"],
        "name": "bar2",
      }
    ]
  },
  {
    "name": "bar3",
    "value":[
      {
        "value": "val1",
        "Diagnosis_Code": ["foo01"],
        "name": "bar3",
      },
      {
        "value": "val2",
        "Diagnosis_Code": ["foo03", "foo04"],
        "name": "bar3",
      },
      {
        "value": "val3",
        "Diagnosis_Code": ["foo02"],
        "name": "bar3",
      },
    ]
  },
  {
    "name": "bar4",
    "value": [
      {
        "value": "val1",
        "Diagnosis_Code": ["foo01", "foo02", "foo04"],
        "name": "bar4",
      },
      {
        "value": "val2",
        "Diagnosis_Code": ["foo03"],
        "name": "bar4",
      },
    ]
  },
]

Я хочу поместить дубликат name в Object и если Diagnosis_Code для json совпадает с другим значением, поместите его в массив

Код, который я сейчас использую, это просто использование уменьшите для обработки name, но я не знаю, как обрабатывать Diagnosis_Code свойство:

 var orgArray = [{"value":"foo01","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"foo02","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"foo03","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"foo04","Diagnosis_Code":"Tidak ada","name":"bar"},{"value":"val1","Diagnosis_Code":"foo03","name":"bar2"},{"value":"val2","Diagnosis_Code":"foo01","name":"bar2"},{"value":"val3","Diagnosis_Code":"foo02","name":"bar2"},{"value":"val3","Diagnosis_Code":"foo04","name":"bar2"},{"value":"val1","Diagnosis_Code":"foo01","name":"bar3"},{"value":"val2","Diagnosis_Code":"foo03","name":"bar3"},{"value":"val2","Diagnosis_Code":"foo04","name":"bar3"},{"value":"val3","Diagnosis_Code":"foo02","name":"bar3"},{"value":"val1","Diagnosis_Code":"foo01","name":"bar4"},{"value":"val1","Diagnosis_Code":"foo02","name":"bar4"},{"value":"val1","Diagnosis_Code":"foo04","name":"bar4"},{"value":"val2","Diagnosis_Code":"foo03","name":"bar4"}];

var newArray = orgArray.reduce(function(acc, curr) {
  var findIfNameExist = acc.findIndex(function(item) {
    return item.name === curr.name;
  })
  if (findIfNameExist === -1) {
    let obj = {
      'name': curr.name,
      "value": [curr]
    }
    acc.push(obj)
  } else {
    acc[findIfNameExist].value.push(curr)
  }
  return acc;

}, []);
console.log(newArray)

Есть ли способ обработки преобразования дубликатов Diagnosis_Code в массив?

4 голоса | спросил Flix 8 Mayam18 2018, 09:18:08

2 ответа


0
Используйте ---- +: = 0 =: + ----, чтобы преобразовать массив в объект, как вы делаете, но тогда вам нужно ---- +: = 1 =: + ----дважды, чтобы увидеть, существует ли соответствующий ---- +: = 2 =: + ----, а затем, если соответствующий объект ---- +: = 3 =: + ---- существует.---- +: = 4 =: + ---- (или ---- +: = 5 =: + ---- ) только одного раза будет недостаточно.Не смешивайте ---- +: = 7 =: + ---- и ---- +: = 8 =: + ---- /---- +: = 9 =: + ---- - если вы используете ES6, которым вы и должны быть, всегда используйте ---- +: = 10 =: + ---- , за исключением случаев, когда вам нужно переназначить, в этом случае используйте ---- +: =11 =: + ---- .( ---- +: = 12 =: + ---- поднят и имеет область действия функции, а не область блока, которая неинтуитивна и может привести к неожиданным ошибкам)
ответил CertainPerformance 8 Mayam18 2018, 09:23:48
0
Вот еще один пример!Сначала я использую Reduce, чтобы уменьшить ваш объект, затем я использую map, чтобы переназначить его, чтобы получить ожидаемый формат;)Возможно, это не самый эффективный способ сделать это, но я считаю, что это более удобный и читаемый способ.Я надеюсь, что это понятно и поможет вам: D
ответил sjahan 8 Mayam18 2018, 09:59:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132