Найдите ключи с такими же значениями в JSON - PullRequest
1 голос
/ 29 мая 2020

У меня ниже json

[{
    "workType": "NDB To Nice",
    "priority": 5
},
{
    "workType": "PDAD",
    "priority": 0
}, {
    "workType": "PPACA",
    "priority": 0
}, {
    "workType": "Retrigger",
    "priority": "5"
}, {
    "workType": "Special Intake Request Intake",
    "priority": "7"
}]

Мне нужно вызвать все «рабочие типы», которые имеют одинаковый «приоритет», если приоритет НЕ РАВЕН 0.

Значит, в приведенном выше примере я должен получить keys = ["NDB To Nice", "Retrigger"], поскольку они оба имеют приоритет 5.

Я пробовал код ниже

  function(array, k) {
  return array.reduce(function(acc, cur) {
    (acc[cur[k]] = acc[cur[k]] || []).push(cur);
    return acc;
  }, {});
};

Но я не удается добиться вывода.

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Попробуйте сгруппировать элементы по методу reduce, а затем просто filter

let hashMap = input.reduce((a, {workType, priority})=> {
    if (priority > 0) {
       a[priority] = a[priority] || [];
       a[priority].push(workType);
    }
    return a;
},{});
let result = Object.entries(hashMap)
   .filter(([k, v]) => v.length > 1)
   .map(([k, v]) => v);

Пример:

let input = [{ "workType": "NDB To Nice", "priority": 5 },
{ "workType": "PDAD", "priority": 0 },
{ "workType": "PPACA", "priority": 0 },
{ "workType": "Retrigger", "priority": "5" },
{ "workType": "Special Intake Request Intake", "priority": "7" }
];

// I need to call out all the "worktype" which have same "priority" , if the priority is NOT EQUAL TO 0.
// keys = ["NDB To Nice","Retrigger"]
let hashMap = input.reduce((a, {workType, priority})=> {
  if (priority > 0) {
  a[priority] = a[priority] || [];
  a[priority].push(workType);
  }
  return a;
},{});
let result = Object.entries(hashMap).filter(([k, v]) => v.length > 1).map(([k, v]) => v);
console.log(result);

Или вам нравятся встроенные методы (на мой взгляд, ему не хватает читабельности)

let input = [{ "workType": "NDB To Nice", "priority": 5 },
{ "workType": "PDAD", "priority": 0 },
{ "workType": "PPACA", "priority": 0 },
{ "workType": "Retrigger", "priority": "5" },
{ "workType": "Special Intake Request Intake", "priority": "7" }
];

let hashMap = input.reduce((a, {workType, priority})=> ( ((priority > 0) ? 
(a[priority] = a[priority] || [], a[priority].push(workType)) : null), a), {});
let result = Object.entries(hashMap).filter(([k, v]) => v.length > 1).map(([k, v]) => v)
console.log(result);
1 голос
/ 29 мая 2020

const array = [{ "workType": "NDB To Nice", "priority": 5 }, { "workType": "PDAD", "priority": 0 }, { "workType": "PPACA", "priority": 0 }, { "workType": "Retrigger", "priority": "5" }, { "workType": "Special Intake Request Intake", "priority": "7" }];
const output = array.filter(a => a.priority > 0 && array.filter(a2=> a.priority == a2.priority).length > 1).map(a => a.workType);
console.log(output)
1 голос
/ 29 мая 2020

Вы можете попробовать следующее

var input = [{ "workType": "NDB To Nice", "priority": 5 }, { "workType": "PDAD", "priority": 0 }, { "workType": "PPACA", "priority": 0 }, { "workType": "Retrigger", "priority": "5" }, { "workType": "Special Intake Request Intake", "priority": "7" }];

var output = input.reduce((r, a) => {
  r[a.priority] = r[a.priority] || [];
  if (!r[a.priority].includes(a.workType)) {       // <-- ignore duplicates
    r[a.priority].push(a.workType);
  }
  return r;
}, Object.create(null));
  
console.log(output);        // <-- all priorities
console.log(output['5']);   // <-- priority '5'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...