topojson / d3.js: Uncaught (в обещании) TypeError: Невозможно прочитать свойство 'type' из неопределенного - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь разработать четвертый проект freeCodeCamp из Сертификата визуализации данных, картограммы.Вот что я написал:

const promisses = [d3.json('https://raw.githubusercontent.com/no-stack-dub-sack/testable-projects-fcc/master/src/data/choropleth_map/counties.json'), d3.json('https://raw.githubusercontent.com/no-stack-dub-sack/testable-projects-fcc/master/src/data/choropleth_map/for_user_education.json')];

Promise.all(promisses).then((d)=>{return processData(d)});

function processData(data) {
  for (let i = 0; i < data.length; i++) {
    //console.log(JSON.stringify(data[i]));
  }
  
  let w = 800;
  let h = 0.6 * w;
  let padding = 40;
  
  let svg = d3.select('#chart-bg').append('svg');
  
  svg.attr('width', w + 2 * padding)
    .attr('height', h + 2 * padding)
    .attr('id','map')
  
  console.log(JSON.stringify(data[0].objects.counties));
  
  //The next line is where I am having trouble
  let counties = topojson.feature(data[0].objects.counties);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/3.0.2/topojson.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

До последней строки не было никаких проблем, но затем он говорит "Uncaught (в обещании) TypeError: Невозможно прочитать свойство 'type' undefined".У кого-нибудь есть идея, почему это происходит?data[0].objects.counties регистрируется нормально.

РЕДАКТИРОВАТЬ: data [0] .objects.counties имеет свойство type и свойство geometryries.

1 Ответ

0 голосов
/ 14 декабря 2018

topojson.feature принимает два параметра, как видно из документа topojson:

topojson.feature(topology, object);

Вы указали только те объекты, которые хотите извлечь:

 let counties = topojson.feature(data[0].objects.counties);

Вероятно, произошла ошибкаиз-за отсутствия второго параметра: type не определено для второго параметра, так как второй параметр не определен.

Используя оба параметра, вы можете извлечь свои функции без ошибок, используя оба параметра ниже:

let counties = topojson.feature(data[0], data[0].objects.counties);

const promisses = [d3.json('https://raw.githubusercontent.com/no-stack-dub-sack/testable-projects-fcc/master/src/data/choropleth_map/counties.json'), d3.json('https://raw.githubusercontent.com/no-stack-dub-sack/testable-projects-fcc/master/src/data/choropleth_map/for_user_education.json')];

Promise.all(promisses).then((d)=>{return processData(d)});

function processData(data) {
  for (let i = 0; i < data.length; i++) {
    //console.log(JSON.stringify(data[i]));
  }
  
  let w = 800;
  let h = 0.6 * w;
  let padding = 40;
  
  let svg = d3.select('#chart-bg').append('svg');
  
  svg.attr('width', w + 2 * padding)
    .attr('height', h + 2 * padding)
    .attr('id','map')
  
  
  //The next line is where I am having trouble
  let counties = topojson.feature(data[0], data[0].objects.counties);
  console.log(JSON.stringify(counties));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/3.0.2/topojson.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
...