Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как посчитать количество элементов в объекте по определенному условию? (https://javascript.ru/forum/misc/80922-kak-poschitat-kolichestvo-ehlementov-v-obekte-po-opredelennomu-usloviyu.html)

ddoss 26.08.2020 10:58

Как посчитать количество элементов в объекте по определенному условию?
 
{
developer_name0: 'Egor',
application_system0: 'Android',
developer_name1: 'Sasha',
application_system1: 'Android',
developer_name2: 'Egor',
application_system2: 'IOS',
developer_name3: 'Sasha',
application_system3: 'IOS',
developer_name4: 'Egor',
application_system4: 'Android',
developer_name5: 'Sasha',
application_system5: 'IOS',
developer_name6: 'Artur',
application_system6: 'Android',
}

или же массив обьектов

[{developer_name: 'Egor',
application_system: 'Android'},
{developer_name: 'Sasha',
application_system: 'Android'},
{developer_name: 'Egor',
application_system: 'IOS'},
{developer_name: 'Sasha',
application_system: 'IOS'},
{developer_name: 'Egor',
application_system: 'Android'},
{developer_name: 'Sasha',
application_system: 'IOS'},
{developer_name6: 'Artur',
application_system6: 'Android'}
]


Или же в виде массива
[ 'Egor',
'Android',
 'Sasha',
 'Android',
 'Egor',
 'IOS',
 'Sasha',
 'IOS',
 'Egor',
 'Android',
 'Sasha',
 'IOS',
 'Artur',
 'Android']



Имена могут быть разными, операционки нет.\

Ожидаемый результат

Egor: Android -2, IOS -1
Sasha: Android - 1, IOS - 2
Artur: Android - 1, IOS - 0

laimas 26.08.2020 11:06

Самое неудачное, что можно придумать для связи сущностей, это именование ключей как name1, name2, ...

ddoss 26.08.2020 11:08

Понимаю, поэтому массив дописал)

laimas 26.08.2020 11:12

Цитата:

Сообщение от ddoss
Понимаю, поэтому массив дописал

А как в массиве понять какой элемент его связан с другим (ми)?

ddoss 26.08.2020 11:13

первый со вторым, третий с четвертым, по парам

ddoss 26.08.2020 11:14

Посмотрите еще на массив обьектов, мне кажется он вам приятнее всего будет

laimas 26.08.2020 11:19

Цитата:

Сообщение от ddoss
первый со вторым, третий с четвертым, по парам

Уверены в этом? А если порядок в исходнике будет нарушен? Откуда такие данные и почему они не могут иметь структуру:

[
    {'Egor' : 'Android'},
    {'Sasha' : 'Android'},
     ....
]
//или
[
    {name: 'Egor', system: 'Android'},
    {name: 'Sasha', system: 'Android'},
     ....
]


И по какому признаку получилось - Egor: Android -2, IOS -1, как Egor связан с IOS в исходных данных?

ddoss 26.08.2020 11:25

Можно и нарушить структуру если так легче решить задачу, например, в массиве обьектов - 3 обьект это {developer_name: 'Egor', application_system: 'IOS'} вот и связь)

laimas 26.08.2020 11:32

Цитата:

Сообщение от ddoss
Можно и нарушить структуру

У вас мягко говоря и нет никакой вменяемой структуры, в этом и беда, а если нарушить ваш порядок, то это вообще хрен знает что и как решать.

Цитата:

Сообщение от ddoss
например, в массиве обьектов - 3 обьект это {developer_name: 'Egor', application_system: 'IOS'}

Что за бред. У вас прописано Егоров несколько, это один и тот же Егор или это разные ребятки? Если это один и тот же, то как скрипту это понять, потому что "первый со вторым, третий с четвертым ..."? А как же третий?

У вас в исходнике бардак, и если этот бардак с сервера пришел, то разбирайтесь на нем и отдавайте клиенту именно структурированные связанные данные, а не "кофейную гущу". Если это формируется на клиенте, то формируйте должным образом, дабы не перебирать все заново гадая что чему принадлежит.

рони 26.08.2020 11:35

ddoss,
<script>
let data = [{developer_name: 'Egor',
application_system: 'Android'},
{developer_name: 'Sasha',
application_system: 'Android'},
{developer_name: 'Egor',
application_system: 'IOS'},
{developer_name: 'Sasha',
application_system: 'IOS'},
{developer_name: 'Egor',
application_system: 'Android'},
{developer_name: 'Sasha',
application_system: 'IOS'},
{developer_name: 'Artur',
application_system: 'Android'}
];
const fn = data => {
let obj = {};
for(let {developer_name : a, application_system : b} of data) {
if(obj[a] === undefined) obj[a] = {};
if(obj[a][b] === undefined) obj[a][b] = 0;
obj[a][b]++;
}
return obj;
}
document.write(JSON.stringify(fn(data)))
  </script>


Часовой пояс GMT +3, время: 07:08.