Как добавить индекс к объекту JSON из переменной

#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 существуют …. пространство для меня подозрительно