Javascript 防止函数嵌套过多的不同方法

Javascript 防止函数嵌套过多的不同方法,javascript,d3.js,jquery-ui-slider,Javascript,D3.js,Jquery Ui Slider,我想知道是否有更好的方法来解决以下问题,并防止由于嵌套函数太多而导致代码无法读取: 我正在使用d3.js和jquery slider生成一张欧洲地图,显示每个地区的失业率。滑块用于在2005年到2015年之间切换。在每次滑块更改时,我都希望重新存储europe.svg 到目前为止,我解决了以下问题: var color = d3.scaleThreshold() .domain([0, 1, 3, 5, 7, 10, 13, 16, 20, 25]) .range(["#006837",

我想知道是否有更好的方法来解决以下问题,并防止由于嵌套函数太多而导致代码无法读取:

我正在使用d3.js和jquery slider生成一张欧洲地图,显示每个地区的失业率。滑块用于在2005年到2015年之间切换。在每次滑块更改时,我都希望重新存储europe.svg

到目前为止,我解决了以下问题:

var color = d3.scaleThreshold()
  .domain([0, 1, 3, 5, 7, 10, 13, 16, 20, 25])
  .range(["#006837", "#1a9850", "#66bd63", "#a6d96a", "#d9ef8b", "#fee08b", "#fdae61", "#f46d43", "#d73027", "#a50026", "#808080"]);

d3.queue()
  .defer(d3.json, "data/json/euRegions.json")
  .defer(d3.csv, "data/csv/euUnemploymentRates.csv")
  .await(initializeEUmap);

function initializeEUmap(error, euRegionsJson, euUnemploymentcsv) {
  if (error) throw error;

  euRegionsJson.features.forEach(function(d) {
    for (var i = 0; i <= 334; i += 1) {
      if (d.properties.NUTS_ID == euUnemploymentcsv[i].Flag) {
          for (var j = 2005; j <= 2015; j += 1) {
              d.properties[j] = euUnemploymentcsv[i][j];
          }
      }
    }
  });

  $('#slider').slider().bind('slidechange', function(event, ui) {
    var sliderValue = $('#slider').slider("option", "value");
    svgEurope.selectAll(".euMap").remove();
    svgEurope.selectAll("path")
      .data(euRegionsJson)
      .enter().append("path")
      .attr("cx", function(d, i) {return projection([d.longitude, d.latitude])[0];})
      .attr("cy", function(d, i) {return projection([d.longitude, d.latitude])[1];})
      .data(euRegionsJson.features)
      .enter().append("path")
      .attr("d", geoPath)
      .attr("class", "euMap")
      .attr("fill", function(d) {return color(d.properties[sliderValue]);})
      .style("stroke", "black")
      .style("stroke-width", "0.4px");
});
var color=d3.scaleThreshold()
.domain([0,1,3,5,7,10,13,16,20,25])
.范围([“#006837”、“#1a9850”、“#66bd63”、“#a6d96a”、“#d9ef8b”、“#fee08b”、“#fdae61”、“#f46d43”、“#d73027”、“#a50026”、“#8080”);
d3.队列()
.defer(d3.json,“data/json/euRegions.json”)
.defer(d3.csv,“data/csv/euUnemploymentRates.csv”)
.等待(初始化为UMAP);
函数initializeEUmap(错误,euRegionsJson,euUnemploymentcsv){
如果(错误)抛出错误;
euRegionsJson.features.forEach(函数(d){

对于(var i=0;i我会将
slidechange
回调重构为函数声明,并取消它的测试。您还使用了代码中未提供的一些变量,但只需将所需的任何变量传递到
onSlideChange

    var color = d3.scaleThreshold()
  .domain([0, 1, 3, 5, 7, 10, 13, 16, 20, 25])
  .range(["#006837", "#1a9850", "#66bd63", "#a6d96a", "#d9ef8b", "#fee08b", "#fdae61", "#f46d43", "#d73027", "#a50026", "#808080"]);

d3.queue()
  .defer(d3.json, "data/json/euRegions.json")
  .defer(d3.csv, "data/csv/euUnemploymentRates.csv")
  .await(initializeEUmap);

function initializeEUmap(error, euRegionsJson, euUnemploymentcsv) {
  if (error) throw error;

  euRegionsJson.features.forEach(function(d) {
    for (var i = 0; i <= 334; i += 1) {
      if (d.properties.NUTS_ID == euUnemploymentcsv[i].Flag) {
          for (var j = 2005; j <= 2015; j += 1) {
              d.properties[j] = euUnemploymentcsv[i][j];
          }
      }
    }
  });

  $('#slider').slider().bind('slidechange', e => onSlideChange(e,euRegionsJson));

}

function onSlideChange(event, euRegionsJson) {
    var sliderValue = $('#slider').slider("option", "value");
    svgEurope.selectAll(".euMap").remove();
    svgEurope.selectAll("path")
      .data(euRegionsJson)
      .enter().append("path")
      .attr("cx", function(d, i) {return projection([d.longitude, d.latitude])[0];})
      .attr("cy", function(d, i) {return projection([d.longitude, d.latitude])[1];})
      .data(euRegionsJson.features)
      .enter().append("path")
      .attr("d", geoPath)
      .attr("class", "euMap")
      .attr("fill", function(d) {return color(d.properties[sliderValue]);})
      .style("stroke", "black")
      .style("stroke-width", "0.4px");
}
var color=d3.scaleThreshold()
.domain([0,1,3,5,7,10,13,16,20,25])
.范围([“#006837”、“#1a9850”、“#66bd63”、“#a6d96a”、“#d9ef8b”、“#fee08b”、“#fdae61”、“#f46d43”、“#d73027”、“#a50026”、“#8080”);
d3.队列()
.defer(d3.json,“data/json/euRegions.json”)
.defer(d3.csv,“data/csv/euUnemploymentRates.csv”)
.等待(初始化为UMAP);
函数initializeEUmap(错误,euRegionsJson,euUnemploymentcsv){
如果(错误)抛出错误;
euRegionsJson.features.forEach(函数(d){
对于(var i=0;我不确定“e=>”的作用。到目前为止,我找不到关于它的任何信息。它并不意味着“更大或相等”,而是以某种方式在SlideChange上启动函数?!感谢您提出了一种不同的方法。。