Как упорядочить массив по категориям?

avatar
Zakaria Mountassir
9 августа 2021 в 00:17
63
3
1

Я буквально новичок в javascript, у меня есть такие серии данных

[3,3,4,5,5,6] 

в виде массива Я хочу это устроить, я ожидаю, что на выходе будет

(2 из 3) (1 из 4) (2 из 5) (1 из 6)

Может ли кто-нибудь помочь мне решить эту проблему?

Мне нужно отобразить эти данные на диаграмме, я использую chartJS, число в виде месяцев (1 – январь, 2 – февраль....)

эта правда мои данные выглядят так

021-06-20T16:17:35.000000Z
2021-07-19T00:17:35.000000Z
2021-07-20T00:17:35.000000Z
2021-07-21T00:17:35.000000Z
2021-07-21T00:17:35.000000Z
2021-08-21T00:17:35.000000Z

Что я действительно ожидаю, так это иметь массив объектов в этой форме

[{data : '06',count : 1},
{data : '07',count : 4},
{data : '08',count : 1}]

Есть ли какой-нибудь трюк, который я могу сделать с помощью chartjs без форматирования моих данных?

Источник

Ответы (3)

avatar
Minh Tân
10 августа 2021 в 12:21
0

Решение:

a = [3,3,4,5,5,6]

new Set(a).forEach(x => console.log('data: ' + x + ', count: ' + a.filter(y => y === x).length));

Вывод:

data: 3, count: 2
data: 4, count: 1
data: 5, count: 2
data: 6, count: 1
avatar
halilcakar
9 августа 2021 в 00:36
2

Вы можете сделать это разными способами, но я дам вам один.

function callback(acc, child) {
  let isCreated = acc.find((ch) => ch.data === child);
  if (isCreated) {
    isCreated.count++;
  } else {
    acc.push({ data: child, count: 1 });
  }

  return acc;
}

let data = [3, 3, 4, 5, 5, 6].reduce(callback, []);

console.log(data);

лог должен быть

[
  { data: 3, count: 2 },
  { data: 4, count: 1 },
  { data: 5, count: 2 },
  { data: 6, count: 1 }
]
avatar
Farhad Rad
9 августа 2021 в 00:33
1

Вы можете просто использовать это, может помочь:

// This is the test array
var a = [1,1,1,2,2,3,4,4,5];

// This will create object below
// { 1: 3, 2: 2, 3: 1, 4: 2, 5: 1}
var counter = a.reduce((state,current)=> (state[current] = (state[current] || 0) + 1, state),{});

// This will log the output you mentioned
for (const [number, count] of Object.entries(counter)) {
  console.log(`(${count} of ${number})`);
}