Передача строки функции в качестве свойства объекта в «let» дает «неожиданный токен» »

1

Я пытаюсь создать "общую" функцию построения диаграмм, которая принимает ряд параметров для наложения различных значений данных с разными метками и базовыми значениями. Для этого я создал следующую функцию:

function ProcessChart(obj, valToChart, desc, element, baselineVal) {
    let arr = obj.map(e => {
        let { dateTime, [valToChart] } = e; // ERROR: Unexpected token }
        return [new Date(dateTime), +[valToChart]];
    });

    arr.unshift(["DateTime", desc]);
    var data = google.visualization.arrayToDataTable(arr)

    var options = {
        title: desc + " for " + obj[0].computerName,
        curveType: 'function',
        legend: { position: 'bottom' },
        animation: {
            startup: false,
            duration: 500
        },
        vAxis: {
            baseline: baselineVal,
            baselineColor: 'red'
        }
    };

    var chart = new 
    google.visualization.LineChart(document.getElementById(element));
    chart.draw(data, options);
}

Абонент:

google.charts.setOnLoadCallback(ProcessChart(obj, "averageJitterInMs", "Average Jitter (ms)", "line-jitter-8hr", 10))
google.charts.setOnLoadCallback(ProcessChart(obj, "roundTripLatencyInMs", 'Round-Trip Latency (ms)', 'line-delay-8-hr', 8))

Проблема заключается в том, что мой valToChart дает ошибку:

Неожиданный маркер }

Есть ли другой способ выразить это как динамическое свойство для объекта obj? Я тестировал этот код с "жестко закодированными" значениями в каждом месте, и он отлично работает.

  • 1
    let { dateTime, [valToChart] } = e При деструктурировании объекта, если вы не извлекаете свойство сразу в переменную (как, например, с dateTime ), вам нужно указать имя свойства.
  • 0
    о, так вы ожидаете let { dateTime, [valToChart] } = e; приводить к двум переменным, dateTime и averageJitterInMs или roundTripLatencyInMs - деструктуризация не работает таким образом
Показать ещё 4 комментария
Теги:

1 ответ

2
Лучший ответ

Никакого деструктурирования не требуется (в любом случае это не работает)

let arr = obj.map(e => [new Date(e.dateTime), +e[valToChart]]);

Должен делать то, что вы хотите

  • 0
    Вау, ты бог! ;-)
  • 0
    Когда-то было, не больше: p
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню