Удалить дублирующее значение из массива массива - PullRequest
1 голос
/ 03 июня 2019

У меня есть массив объектов, и я хочу избежать дублирования значения с определенным значением ключа.

Это objectArray.

   var dept = 
 [
    {
  "department": [
    { "userName": "cds",
      "userId": "33",
      "userFirstname": "Chef",
      "userLastname": "Jone"
    },
    {
      "userName": "asset1",
      "userId": "27",
      "userFirstname": "Asset",
      "userLastname": "Ann "
    }
  ],
  "comment": "",
  "doc": null
},
{
  "department": [
    { 
      "userName": "audit1",
      "userId": "32",
      "userFirstname": "Audit",
      "userLastname": "Kim"
    },
    { "userName": "cds",
      "userId": "33",
      "userFirstname": "Chef",
      "userLastname": "Jone"
    }
  ],
  "comment": "",
  "doc": null
    }
 ];

Я пытался вернуть не дублированный объект с помощьюJavaScript.Но результат кажется другим.Я могу вернуть значение из одного массива объектов.Однако я испытываю трудности с извлечением значений из массива массива.Как назначить фильтр массива из массива?Любая помощь будет оценена.Заранее спасибо.

   function getUnique(dept, comp) { 

  const unique = dept
   .map(e => e[comp])

 // store the keys of the unique objects
.map((e, i, final) => final.indexOf(e) === i && i)

// eliminate the dead keys & store unique objects
.filter(e => dept[e]).map(e => dept[e]);

  return unique;
  }

return getUnique(dept,'userName');

Я бы получил результат

 [
{
  "department": [
    { "userName": "cds",
      "userId": "33",
      "userFirstname": "Chef",
      "userLastname": "Jone"
    },
    {
      "userName": "asset1",
      "userId": "27",
      "userFirstname": "Asset",
      "userLastname": "Ann "
    }
  ],
  "comment": "",
  "doc": null
},
{
  "department": [
    { 
      "userName": "audit1",
      "userId": "32",
      "userFirstname": "Audit",
      "userLastname": "Kim"
    } 
  ],
  "comment": "",
  "doc": null
    }
  ];

Однако я получил результат

   [
    {
"department": [
 { "userName": "cds",
    "userId": "33",
    "userFirstname": "Chef",
    "userLastname": "Jone"
 },
 {
      "userName": "asset1",
      "userId": "27",
      "userFirstname": "Asset",
      "userLastname": "Ann "
  }
],
"comment": "",
"doc": null
  }
]

1 Ответ

1 голос
/ 03 июня 2019

Вы можете использовать комбинацию карты и фильтра

var dept =[{"department": [{ "userName": "cds","userId": "33","userFirstname": "Chef","userLastname": "Jone"},{"userName": "asset1","userId": "27","userFirstname": "Asset","userLastname": "Ann "}],"comment": "","doc": null},{ "department": [{ "userName": "audit1","userId": "32","userFirstname": "Audit","userLastname": "Kim"},{ "userName": "cds","userId": "33","userFirstname": "Chef","userLastname": "Jone"}],"comment": "","doc": null}];
 
let tracker = {}
let op = dept.map(val => {
  let department = val.department
  let filtered = department.filter(({userId}) => {
    if(tracker[userId] !== undefined ){
      return false
    } else {
      tracker[userId] = userId
      return true
    }
  })
  return {...val,department: filtered}
})

console.log(op)
...