Думаю, приведенный здесь пример кода демонстрирует, что вы пытаетесь сделать.
Скрипт мог бы быть короче, но я сделал его подробным для ясности.
Если вы еще не знаете, JavaScript объекты содержат «свойства». У каждого свойства есть key
и value
. (Ключ обычно должен быть строкой, но значение может быть любым, включая другой объект.)
Этот сценарий использует collector
объект с 3 свойствами, по 1 для каждого типа данные, которые вы считаете. key
для каждого свойства соответствует типу данных (например, prs
для ProvRes
), а value
для каждого свойства - это объект, который мы можем рассматривать как содержащий множество «подсвойств».
По мере того, как скрипт просматривает входные данные, он будет смотреть на свойство ProvRes
каждого элемента во входных данных.
- Если значение незнакомо, он создаст новое вложенное свойство в объекте prs
. key
этого подсвойства будет новым (незнакомым) значением, а value
подсвойства будет целым числом 1 (что указывает на то, что мы видели это значение 1 раз).
- Если значение знакомо, оно обновит соответствующее вспомогательное свойство , увеличивая значение на 1 (потому что теперь мы видели это значение еще на 1 раз).
Каждый раз через l oop, сценарий обрабатывает ProvRes
таким образом, а также обрабатывает CityMunRes
и CityMuniPSGC
. (Если одно из этих 3 свойств отсутствует в элементе в массиве входных данных, JavaScript будет использовать значение undefined
, что можно увидеть, если запустить сценарий во фрагменте.)
// Makes demo input data
const dataArray = [
{ "ProvRes": "A", "CityMunRes": "1", "CityMuniPSGC": "#" },
{ "ProvRes": "A", "CityMunRes": "1", "CityMuniPSGC": "#" },
{ "ProvRes": "B", "CityMunRes": "2", "CityMuniPSGC": "$" },
{ "ProvRes": "A", "CityMunRes": "2", "CityMuniPSGC": "$" },
{ "ProvRes": "C", "CityMunRes": "3", "CityMuniPSGC": "%" },
{ "CityMunRes": "4", "CityMuniPSGC": "%" } // No "ProvRes" - treated as `undefined`
];
// Makes a collector object to count occurences of each value
const collector = {
prs: {},
cmrs: {},
cmpsgcs: {}
};
// Loops through all the items in the input data array
for (let item of dataArray){
// Makes a short name for each significant property of the current item
let pr = item.ProvRes;
let cmr = item.CityMunRes;
let cmpsgc = item.CityMuniPSGC;
// If the current value exists as a key in collector.prs, increments the count
if(collector.prs[pr]){ collector.prs[pr] += 1; }
// Otherwise, creates the key and starts the count at 1
else{ collector.prs[pr] = 1 }
// Same as above, but for collector.cmrs
if(collector.cmrs[cmr]){ collector.cmrs[cmr] += 1; }
else{ collector.cmrs[cmr] = 1 }
// Same as above, but for collector.cmpsgcs
if(collector.cmpsgcs[cmpsgc]){ collector.cmpsgcs[cmpsgc] += 1; }
else{ collector.cmpsgcs[cmpsgc] = 1 }
} // This is the end of the for loop
// Displays the finished collection in the browser console
console.log(collector);