Передача переменной из forEach в другую функцию - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь получить var из forEach l oop в отдельную функцию. Мой пример взят из функции диаграмм Google, что может быть причиной путаницы, однако, когда я пытаюсь получить массив var из моего forEach в arrayToDataTable диаграммы, я получаю ошибку undefined. Это мой код:

function showInfo(data, tabletop) {
  //alert('Successfully processed!')
  console.log(data);
  var header = document.querySelector('.header');
  var bodytext = document.querySelector('.bodytext');
  let i = 1;
  data.forEach(function(data) {
    var array = data.Name
    console.log(array)
  })
};


google.charts.load('current', {
  'packages': ['corechart']
});
google.charts.setOnLoadCallback(drawChart);

function drawChart(nameArrays, array) {
  var daa = google.visualization.arrayToDataTable([
    ['Name', 'Percentage'],
    ["'" + array + "'", 1],
    ["'" + array + "'", 1]
  ]);

  var options = {
    title: 'People Percentage',
    curveType: 'function',
    legend: {
      position: 'bottom'
    }
  };

  var chart = new google.visualization.PieChart(document.getElementById('curve_chart'));

  chart.draw(daa, options);
}

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Думаю, вот как вам следует подходить к этой проблеме. Вам следует позвонить drawChart внутри for-l oop. Я предполагаю, что google.visualization.arrayToDataTable не является асинхронным вызовом функции

function showInfo(data, tabletop) {
  //alert('Successfully processed!')
  console.log(data);
  var header = document.querySelector('.header');
  var bodytext = document.querySelector('.bodytext');
  let i = 1;
  data.forEach(function(data) {
    drawChart(nameArray, data.Name)
  })
};


google.charts.load('current', {
  'packages': ['corechart']
});
google.charts.setOnLoadCallback(drawChart);

let daa;
function drawChart(nameArrays, name) {
  daa = google.visualization.arrayToDataTable([
    ['Name', 'Percentage']
  ].push(["'" + name + "'", 1]));

  var options = {
    title: 'People Percentage',
    curveType: 'function',
    legend: {
      position: 'bottom'
    }
  };

  var chart = new google.visualization.PieChart(document.getElementById('curve_chart'));

  chart.draw(daa, options);
}
1 голос
/ 16 июня 2020

Вы должны сохранить данные в массиве / varialbe за пределами l oop из l oop и убедиться, что они находятся в той же области, что и тот, который объявляет функцию, значение которой вы собираетесь использовать дюйм.

Это исправление, примененное к вашему решению (включая только его основные области)

var data = [ // Array of records for data, this would be the initial object that you are looping through
    { Name: "Bruh1" },
    { Name: "Bruh2" },
    { Name: "Bruh3" },
];
var arr = []; // Declare the array to take the data outside the loop
data.forEach((data) => {
    arr.push(data.Name); // Push data.Name into an array outside the forEach loop
});

// Putting that data into your other function
console.log([
      ['Name', 'Percentage'],
      ["'" + arr[0] + "'", 1],
      ["'" + arr[1] + "'", 1],
      ["'" + arr[2] + "'", 1]
]);
...