Как переформатировать данные в объектах. (Как я могу сделать строки ключами и другими столбцами значениями) - PullRequest
2 голосов
/ 29 января 2020

Мне удалось экспортировать данные из листов Google в довольно крутой файл JSON, но не в нужном мне формате (упс :)).

По сути, у меня есть данные, где имя столбца - это заголовок значения (в данном случае: местоположение, зараженный, смерть, выздоровление и т. Д. c.) И имя строки - значения соответственно. enter image description here

Есть ли способ, которым я могу переформатировать это в несколько объектов, чтобы у меня было:

 var death_data = {
      cn: "132",
      th: "0",
      mo: "0",
      au: "0",
      sg: "0",

    };


 var infected_data = {
      cn: "4415",
      th: "8",
      mo: "7",
      au: "5",
      sg: "5",

    };

(2 буквы - коды страны. CN: 3554 + 277 + 296 + .. другие ценности Китая + ... 152 + 108 + 84 ... + 13 + 6.) (132 = 125 + 2 + 1 + 1 + 1 + 1 + 1)

Я нашел похожий ресурс здесь , однако он есть в R. Есть ли подобный метод для JavaScript?

На случай, если вам интересно, как я пытался генерировать объекты:

function doGet() {
  var result = {};

  var infected = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();

  var death = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data').getDataRange().getValues();

  result = makeObject(infected);

 // result.death = makeObject(death);

//Logger.log(result);
return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);



}


function makeObject(multiArr) {
  var obj = {};

  var headers = multiArr.shift();

  for(var i = 0; i < headers.length; i++){
    obj[headers[i]] = multiArr.map(function(app) {
      return app[i];
    });
      }


  return obj;
}

Используя приведенный выше код, JSON выглядит следующим образом (с использованием JSON Просмотр chrome расширение): enter image description here Где каждый ключ имеет значения, как это : enter image description here и это enter image description here

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

Извините заранее за мои основы c Знание JavaScript, я только начинаю.

Любая помощь будет принята с благодарностью.

С уважением, Камден

1 Ответ

3 голосов
/ 31 января 2020

Вы можете создать такой объект, зациклив массив и добавив соответствующие значения:

Пример сценария:

function makeObject(multiArr) {
  var obj = {deaths:{}, infected:{}};
  var headers = multiArr.shift();

   multiArr.forEach(function(row){
    var [_,country,_,infected,deaths,_] = row;
    obj.deaths[country] = obj.deaths[country] || 0;
    obj.infected[country] = obj.infected[country] || 0;
    obj.deaths[country] = obj.deaths[country] + Number(deaths);
    obj.infected[country] = obj.infected[country] + Number(infected);
   })

  return obj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...