#javascript #node.js #json
#javascript #node.js #json
Вопрос:
У меня есть список файлов, внутри которых есть массив JSON:
let rawTopTeams = fs.readFileSync('topTeams.json');
let topTeams = JSON.parse(rawTopTeams);
let allResults = [];
topTeams.teams.forEach(function(value){
teamId = value.id;
let resultsJson = fs.readFileSync('team ' teamId '.json');
let resultsParsed = JSON.parse(resultsJson);
// I want to combine them into a unique JSON, and I want to add the file name as a key:
allResults[teamId] = resultsParsed;
Проблема в том, что это не работает. Пытался выполнить TeamID.toString(), но это не меняет результат (для TeamID = 6137):
[
<6137 empty items>,
[
{
INFO HERE
},
]
]
Как я могу объединить все эти файлы JSON и упорядочить их по их уникальному идентификатору, чтобы я мог найти их впоследствии?
Комментарии:
1. Отредактировано, чтобы добавить это.
2.
[]
это синтаксис массива, который должен иметь числовые индексы. Являетсяvalue.id
числом? Я подозреваю, что вместо этого вам нужен объект. Что было бы похожеlet allResults = {}; allResults.stuff = resultsJson; allResults[teamId] = resultsParsed;
3. Кстати, я не понимаю, почему люди заходят и отклоняют мой вопрос. Я стараюсь предоставить как можно больше контекста, не вводя его в заблуждение, и я заранее изучаю вопрос, чтобы посмотреть, найду ли я где-нибудь кого-нибудь с точно такой же проблемой. Что дает?
4. Многие считают, что использование объектной нотации является одной из основ javascript. Поэтому вопрос, связанный с этим, можно рассматривать как недостаточно проведенное исследование, поскольку существует множество существующих ссылок на него.
Ответ №1:
Все, что вам нужно сделать, это создать хэш объекта с ключами, являющимися идентификаторами команды
let rawTopTeams = fs.readFileSync('topTeams.json');
let topTeams = JSON.parse(rawTopTeams);
let allResults = {}; // Notice I changed this to object
topTeams.teams.forEach(function(value){
teamId = value.id;
let resultsJson = fs.readFileSync('team ' teamId '.json');
let resultsParsed = JSON.parse(resultsJson);
// This will now add resultsParsed as a subobject of key teamId under allResults object
allResults[teamId] = resultsParsed;
Ответ №2:
.Вопрос мне не совсем понятен, но в случае, если я правильно его понял, вам лучше выбрать использование reduce
; может быть похоже на следующее
let rawTopTeams = fs.readFileSync('topTeams.json');
let topTeams = JSON.parse(rawTopTeams);
let allResults = topTeams.teams.reduce((acc, team) => {
let resultsJson = fs.readFileSync('team ' team.id '.json');
acc[team.id] = JSON.parse(resultsJson);
return acc
}, {});
Комментарии:
1. кроме того …. вы уверены, что файлы с именем
team WhateverTeamId.json
существуют …. пространство для меня подозрительно