считать объекты из массива с этим объектом и считать этот объект - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть этот фрагмент кода. и хотите сосчитать дубликат applicationType вместе с applicationType и сосчитать оба.

   {
    applicationType:"Supplemental Marketing Application",
    createdBy:"System"
},
{
    applicationType:"Supplemental Marketing Application",
    createdBy:"System"
},
{
    applicationType:"Orphan Application",
    createdBy:"System"
},
{
    applicationType:"Orpahn Application",
    createdBy:"System"
},
{
    applicationType:"IND/BB",
    createdBy:"System"
}

Я хочу посчитать тип приложения вместе с именем типа приложения, и хочу получить такой результат,

{
    applicationType:"Supplemental Marketing Application",
    count:"2"
},
{
    applicationType:"Orphan Application",
    count:"2"
},
{
    applicationType:"IND/BB",
    count:"1"
}

или

applicationType = [Supplemental Marketing Application,Orphan Application,IND/BB]
count = [2,2,1]

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете использовать Array.reduce() для создания карты, сгруппированной по типу приложения. Проверьте, присутствует ли тип приложения на карте или нет, если он уже существует на карте, чем обновите счет на 1, или сопоставьте его со счетчиком по умолчанию, равным 1. Object.values() на карте даст вам желаемый результат:

let arr = [ { applicationType:"Supplemental Marketing Application", createdBy:"System" }, { applicationType:"Supplemental Marketing Application", createdBy:"System" }, { applicationType:"Orphan Application", createdBy:"System" }, { applicationType:"Orphan Application", createdBy:"System" }, { applicationType:"IND/BB", createdBy:"System" } ];

let result = Object.values(arr.reduce((a, curr)=>{
  a[curr.applicationType] = a[curr.applicationType] || {applicationType : curr.applicationType, count : 0} ;
  a[curr.applicationType].count++;
  return a;
},{}));

console.log(result);
0 голосов
/ 03 сентября 2018

Вы можете использовать функцию Reduce и проверить, существует ли в массиве аккумуляторов ключ, значение которого соответствует значению applicationType из исходного массива. Если findIndex ===-1, то создать новый объект с этими значениями из исходного массива, а затем вставить аккумулятор, иначе, если он уже существует, обновить значение счетчика

.

let orgArray = [{
    applicationType: "Supplemental Marketing Application",
    createdBy: "System"
  },
  {
    applicationType: "Supplemental Marketing Application",
    createdBy: "System"
  },
  {
    applicationType: "Orphan Application",
    createdBy: "System"
  },
  {
    applicationType: "Orpahn Application",
    createdBy: "System"
  },
  {
    applicationType: "IND/BB",
    createdBy: "System"
  }
]
let newArray = orgArray.reduce(function(acc, curr) {
  let findIndex = acc.findIndex(function(item) {
    return item.applicationType === curr.applicationType
  });

  if (findIndex === -1) {
    let newObj = {}
    newObj.applicationType = curr.applicationType;
    newObj.count = 1
    acc.push(newObj)
  } else {
    acc[findIndex].count += 1

  }


  return acc;


}, []);

console.log(newArray)
...