Javscript передает результаты функции в другую функцию в проекте Leaflet.js - PullRequest
0 голосов
/ 10 июня 2018

Я работаю над проектом с использованием данных Leaflet.js и geoJson.Я делаю карту хороплета и пытаюсь передать результаты одной функции в другую.Я не думаю, что этот сценарий уникален для Leaflet, и я думаю, что просто спотыкаюсь, когда речь идет о передаче результатов одной функции в качестве параметра другой функции.

У меня есть функция, которая стилизует страны вкарта основана на значениях их ВВП, извлеченных из API:

 function getColor(d) {
      return d > 1000000 ? '#005824' :
          d > 500000  ? '#238b45' :
          d > 200000  ? '#41ae76' :
          d > 100000  ? '#66c2a4' :
          d > 50000   ? '#99d8c9' :
          d > 20000   ? '#ccece6' :
          d > 15000   ? '#edf8fb':
                       '#fff'
    }

Эта функция вызывается этой второй функцией:

  function style(feature) {
      return {
          fillColor: getColor(100000),
          weight: 2,
          opacity: 1,
          color: 'white',
          //dashArray: '3',
          fillOpacity: 0.7,
          stroke: true,
          weight: .5,
          fill: true,
          clickable: true
      };
    }

Как вы можете видеть, в настоящее время 100000 жестко закодировано какПараметр функции getColor.Я хотел бы изменить это так, чтобы данные из API передавались в getColor, а не в это жестко закодированное значение.

У меня есть данные о ВВП, извлекаемые из API, и я могу console.log их с этой функцией:

function getGDP(gdp) {
      for(var i = 0; i < countriesData.features.length; i++) {
       console.log(countriesData.features[i].properties.name + ' ' + countriesData.features[i].properties.gdp_md_est);
       return countriesData.features[i].properties.gdp_md_est;
      }
    } 

Как передать результаты функции getGDP () в функцию getColor () внутри функции style ()?

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

Функция getColor должна выполнять итерацию по элементу countryData.features [i] .properties.gdp_md_est .

Будет что-то вроде этой работы:

function style(feature) {
      return {
          //fillColor: getColor(100000),
          fillColor: getColor(function(d) {
            for(var i = 0; i < countriesData.features.length; i++) {
             var data =  countriesData.features[i].properties.gdp_md_est;
             return data;
            }
          }),
          weight: 2,
          opacity: 1,
          color: 'white',
          //dashArray: '3',
          fillOpacity: 0.7,
          stroke: true,
          weight: .5,
          fill: true,
          clickable: true
      };
    }

1 Ответ

0 голосов
/ 10 июня 2018

Так же, как в этом другом недавнем вопросе и как показано в учебнике Карта листограммы листовки (раздел «Добавление некоторых цветов»), вам просто нужно понять, что листовка L.geoJSON фабрика будет перебирать данные об объектах, которые вы передаете, и вызывать вашу style функцию один раз для каждого объекта , с этими данными об одном объекте в качестве аргумента для вашегоstyle, так как код в вашем вопросе уже настроен.

Поскольку вы наверняка захотите вызвать вашу функцию getColor с данными, связанными с этой единственной функцией (так, чтобы последняя была стилизована в соответствии с ее даннымии не в соответствии с данными из всех других функций), вы понимаете, что контрпродуктивно пытаться выполнить цикл всех ваших функций с помощью функции getGDP и пытаться использовать все эти данные в вашей функции style.

function style(feature) {
  return {
    fillColor: getColor(feature.properties.gdp_md_est),
    // etc.
  };
}
...