Вопрос:

Удалить заголовок строки из структуры JSON

javascript google-apps-script spreadsheet

67 просмотра

2 ответа

45 Репутация автора

введите описание изображения здесь

Вот ссылка на мою таблицу

//max CPC
var maxCPC = 3.00;
//min CPC
var minCPC = 0.50;
//percentage change down


function main() {
    var SPREADSHEET_URL = "https://docs.google.com/spreadsheets/d/1QGJU5FJVmKI3A5A3NFY-XQU7MlBOG0VmvUIZvx8Bitg/edit#gid=72338765";

    var spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
    var sheet = spreadsheet.getSheetByName('Campaigns');
    var data = sheet.getRange("A:C").getValues();

    var test = parseData(data)
}


function isBlank(line) {
    return line[0].trim() === '' && line[1].trim() === '';
}


function parseData(data) {

    const output = {};
    var currentGroupName = '';

    data.forEach(function(line){
        if (isBlank(line)){
            return; 
        }

        if (line[0].trim().length > 1) {
            currentGroupName = line[0].trim();
        }

        output[currentGroupName] = output[currentGroupName] || {};

        output[currentGroupName][line[1]] = line[2];
    });

    return output;
}

Этот код позволяет мне переформатировать таблицу Google в структуру JSON. Я не хочу включать первую строку, так как это строка заголовка, но я не знаю, как это сделать. Как я могу изменить свой код, чтобы он работал нормально?

Автор: Dave Источник Размещён: 08.11.2017 11:18

Ответы (2)


1 плюс

3074 Репутация автора

Существует причина, по которой в большинстве анализаторов возникает вопрос: «Содержит ли ваш файл заголовки?» (или какой-то другой вариант) Однако, если вам всегда будет гарантирована строка заголовка, вы можете изменить свою процедуру разбора примерно так:

function parseData(data) {

    const output = {};
    var currentGroupName = '';
    var skipLine = 1;

    data.forEach(function(line){
        if (isBlank(line)){
            return; 
        }
        if (skipLine == 1) {
            skipline = 0;
        }
        else {
            if (line[0].trim().length > 1) {
                currentGroupName = line[0].trim();
            }

            output[currentGroupName] = output[currentGroupName] || {};

            output[currentGroupName][line[1]] = line[2];
        } 
    });

    return output;
}
Автор: Laughing Vergil Размещён: 08.11.2017 11:34

1 плюс

687 Репутация автора

Решение

Если вас не беспокоит использование памяти, это хороший кандидат для использования назначения деструктуризации ES2015 , которое позволит вам разбить ваш dataмассив на новый headerмассив и новый linesмассив, содержащий массив строк, который вы хотите. Вот как может выглядеть ваш код, используя это:

function parseData(data) {

    const output = {};
    var currentGroupName = '';
    [header, ...lines] = data;  // break data into the first item, 'header', and the rest of the items, 'lines'

    lines.forEach(function(line){
        if (isBlank(line)){
            return; 
        }

        if (line[0].trim().length > 1) {
            currentGroupName = line[0].trim();
        }

        output[currentGroupName] = output[currentGroupName] || {};

        output[currentGroupName][line[1]] = line[2];
    });

    return output;
}

Однако, если вы не хотите копировать массив данных, вы также можете просто включить indexпараметр в forEachвызов внутри вашей parseDataфункции и использовать его для пропуска первой строки данных при выполнении итерации по строкам:

function parseData(data) {

    const output = {};
    var currentGroupName = '';

    data.forEach(function(line, index){
        if (isBlank(line) || index === 0){
            return; 
        }

        if (line[0].trim().length > 1) {
            currentGroupName = line[0].trim();
        }

        output[currentGroupName] = output[currentGroupName] || {};

        output[currentGroupName][line[1]] = line[2];
    });

    return output;
}
Автор: foundling Размещён: 08.11.2017 11:35
Вопросы из категории :
32x32