Можете ли вы использовать операторы if в .nest (). Если нет, то как лучше назначить метки элементам массива, чтобы они помещались в несколько групп? - PullRequest
0 голосов
/ 08 января 2020

Можно ли использовать операторы if в пределах .nest()? Я пытаюсь заполнить столбец несколькими ключами, но вместо поиска имени я хочу назначить имя / значение отдельным строкам на основе того, находится ли значение в столбце в определенном диапазоне чисел. Я посмотрел учебник по D3 Nest и примеры, и мне все еще трудно. Это код, который у меня есть на данный момент, который не работает. Любая помощь будет принята с благодарностью!

fireballData.forEach( d => {
  years.forEach(year => {
    const latitude = d['Latitude (deg.)'];
    const impactEnergy = d['Calculated Total Impact Energy (kt)'];
    const impactTest = +impactEnergy;
    const impactLevel = nest('impactTest')
      .key(function(d) { if (d.impactTest < .5) {return "impactA" }});
      //    .sortKeys(d3.ascending)
      // .key(function(d) { return d.impactEnergy; })
      // .sortKeys(function(a,b) { 
      //    return impactEnergy.indexOf(a) - impactEnergy.indexOf(b); })
      //        .sortValues(function(a,b) { return ((a.who < b.who)
      // ? -1
      // : 1);;
    const longitude = d['Longitude (deg.)'];
    const impactYear = d['PeakBrightnessDate_TimeUT'];
    const row = { 
      //year,
      impactLevel,
      impactEnergy,
      latitude,
      longitude,
      impactYear
    };
    console.log(row); 
  });
});

Просто чтобы быть более понятным, я хочу назначить пять или шесть уровней воздействия для столбца impactLevel в зависимости от того, какое значение имеет значение effectEnergy. Затем в каждой строке будет указан идентификатор ImpactLevel (ie ImpactLevel1), за которым следуют остальные данные этого объекта. Любые решения или предложения приветствуются! Я все еще очень плохо знаком с d3, и я все еще изучаю входы и выходы.

1 Ответ

0 голосов
/ 10 января 2020

Так что то, что я пытался сделать sh, используя .nest, не было хорошим решением. Лучшим способом создания нового массива было использование .map.

export const loadAndProcessData = () => 
  Promise
    .all([
      csv('data.csv')
    ])
    .then(([fireballData]) => {
      const minYear = 2015;
      const maxYear = 2100;

      const years = range(minYear, maxYear + 1);

      const data = [];

      // Special thanks to Darshit Shah for helping me figure this bit out
         const showData = fireballData.map(d =>{
         const impactYear = d['PeakBrightnessDate_TimeUT'];
         const latitude = d['Latitude (deg.)'];
         const longitude = d['Longitude (deg.)'];
         const impactEnergy = +d['Calculated Total Impact Energy (kt)'];
         const target = impactEnergy;
         const type = 'Impact Year: ' + impactYear + ', Latitude: ' + latitude + ', Longitude: ' + longitude;
            return {
                    sorce: (impactEnergy < 0.15 ? "0-0.15" : (impactEnergy < 0.25 ? "0.15-0.25" : (impactEnergy < 0.5 ? "0.25-0.5" : ">0.5"))),
                    target,
                    type
            }        
            });
       data.push(showData);
       return data;

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...