#javascript #arrays #for-loop #object
Вопрос:
У меня есть список отделов, я пытаюсь подсчитать, сколько отделов существует для каждого из них, и увеличить переменную (например i
), чтобы я мог вызвать ее вне цикла и повлиять на нее как на ярлык для каждого отдела.
Я начал с этого, но это не работает :
import publicationTotal from "../data/agora-export-publicationtotal-20210803164942.json";
let stringified, myObj, subkeys;
stringified = JSON.stringify(publicationTotal);
myObj = JSON.parse(stringified);
subkeys = Object.keys(myObj[0]);
let departement= {};
let star = [];
for (let x in myObj) {
if (Object.prototype.hasOwnProperty.call(myObj, x)) {
for (let y in subkeys) {
if (Object.prototype.hasOwnProperty.call(subkeys, y)) {
if (subkeys[y] === "Departement") {
// star = myObj[x][subkeys[y]] 1;
star = departement[ myObj[x][subkeys[y]] ] = departement[ myObj[x][subkeys[y]] ] 1;
console.log("dept : ", star);
}
}
}
}
}
файл publicationTotal содержит такую информацию :
[
{
"num_dep": "AI",
"dep_name": "Ain",
"region_name": "Auvergne-Rhône-Alpes",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AI",
"dep_name": "Ain",
"region_name": "Hauts-de-France",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AM",
"dep_name": "Alpes-Maritimes",
"region_name": "Auvergne-Rhône-Alpes",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AM",
"dep_name": "Alpes-Maritimes",
"region_name": "Provence-Alpes-Côte d'Azur",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AM",
"dep_name": "Alpes-Maritimes",
"region_name": "Provence-Alpes-Côte d'Azur",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AM",
"dep_name": "Alpes-Maritimes",
"region_name": "Provence-Alpes-Côte d'Azur",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AG",
"dep_name": "Ariège",
"region_name": "Auvergne-Rhône-Alpes",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AG",
"dep_name": "Ariège",
"region_name": "Grand Est",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AG",
"dep_name": "Ariège",
"region_name": "Occitanie",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AB",
"dep_name": "Aube",
"region_name": "Grand Est",
"total_parrainages": 0,
"color_dpt": ""
},
{
"num_dep": "AD",
"dep_name": "Aude",
"region_name": "Occitanie",
"total_parrainages": 0,
"color_dpt": ""
}
]
Например, i
переменная будет иметь 4 для департамента «Йонна» и 3 для департамента «Валь-де-Марн».
Ожидаемый результат-название отдела и номер отдельно, чтобы я мог звонить им, куда захочу
Комментарии:
1. Поделитесь ожидаемым результатом в своем вопросе.
2. Каков ожидаемый результат?
3. @navnath, Нитиш, я обновил свой пост
4. @MeryemACHEMLAL-это объект или массив. Два ответа, добавленные здесь, показывают результат в виде объекта. Какие изменения вы ожидаете в ответах на вопросы?
5. мне просто нужно сохранить пример, который я поместил в свой пост, и иметь название отделения и номер отдельно, я имею в виду две переменные, если это возможно
Ответ №1:
const publicationTotal=[{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-d'Oise"}];
let results = {};
publicationTotal.forEach(({
Departement
}) => {
if (results[Departement] === undefined) {
results[Departement] = 0
} else {
results[Departement] = results[Departement] 1
}
})
console.log(results)
Комментарии:
1. спасибо @ksav за ваш комментарий 🙂 , как я могу получить название отдела и номер отдельно, потому что в результате у меня есть это : Йонне: 62
2. Я не совсем понимаю, что вы имеете в виду
get the name and number separately
…
Ответ №2:
если отдел уже уходит? получите его и увеличьте на 1, иначе установите 1
const departments = [{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Yonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Essonne"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Seine-Saint-Denis"},{"Departement":"Val-de-Marne"},{"Departement":"Val-de-Marne"},{"Departement":"Val-de-Marne"},{"Departement":"Val-du0027Oise"}];
const result = departments.reduce((acc, item) => (
acc[item['Departement']] =acc[item['Departement']]
?
acc[item['Departement']] 1
:
1,
acc),{}
);
console.log(result);
// to get only department names
console.log("departments: ", Object.keys(result));
// to get only no of depatment
console.log("department values: ", Object.values(result));
Комментарии:
1. спасибо, в вашем результате есть ошибка, я думаю, нет ?
2. Что это? Я так не думаю
3. последний консольный журнал выдает ошибку, в чем разница между ним и вторым ?
Uncaught TypeError: Object.Keys is not a function
4. Я там набрал ошибку, последняя консоль выдаст вам только массив подсчетов всех отделов, если вы хотите получить результат от
result
just doresult[deparymentName]
, он даст вам подсчет. Я не понял, что вы подразумеваете под другой переменной,result
достаточно для выполнения любой операции.
Ответ №3:
Array.reduce
использовать имя в качестве ключа и считать значением
const publicationTotal = [{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Yonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Essonne"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Seine-Saint-Denis"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-de-Marne"},{Departement:"Val-d'Oise"}];
const output = publicationTotal.reduce((acc, curr) => {
acc[curr.Departement] ? acc[curr.Departement] : acc[curr.Departement] = 1;
return acc;
}, {});
console.log(output);
Комментарии:
1. вам не кажется, что это тяжело, когда у нас есть файл с 2000 отделами или более для каждого из них ?
2. @MeryemACHEMLAL В любом случае вам нужно выполнить цикл, чтобы разделить результат