D3 Choropleth: TypeError: Не удается прочитать свойство «округи» неопределенного

Я слежу за хороплетом Майка Бостока руководство.

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
      <script type = "text/javascript" src = "https://d3js.org/d3-array.v1.min.js"></script>
      <script type = "text/javascript" src = "https://d3js.org/d3-geo.v1.min.js"></script>
      <script src = "https://unpkg.com/topojson-client@3"></script>

      </script>
      <style>
         body { font-family: Arial; }
      </style>
   </head>
   <body>
      <svg></svg>
       <script>

         us = d3.json("https://unpkg.com/us-atlas@1/us/10m.json")

         const width = 960;
         const height = 600;
         const path = d3.geoPath();

         const svg = d3.select("svg")
            .attr("width",width)
            .attr("height",height)
            .style("width", "100%")
            .style("height", "auto");

         //svg-command
         svg.append("g")
         .selectAll("path")
         .data(topojson.feature(us, us.objects.counties).features)
         .enter().append("path")
         .attr("fill", d => color(data.get(d.id)))
         .attr("d", path)
         .append("title")
         .text(d => format(data.get(d.id)));

         format = d3.format("")     
      </script>             

</html>

Я получаю ошибку Uncaught TypeError: Cannot read property 'counties' of undefined at check.html:32 (anonymous) @ check.html:32

Насколько я понимаю, команда svg добавляет элемент группы в качестве дочернего элемента к элементу svg. Он выбирает переменную пути и связывает округа, которые являются объектами в файле topojson. Команда topojson.feature() преобразует данные в формат GEOJson.

Все округа выбираются в команде enter(), так как в html-блоке нет буквы "g". Затем следующие команды присваивают каждому из них цвет и имя.

Используется ли topojson.feature?

topojson.feature все еще используется, но вы не передаете ему topojson - если вы зарегистрируете us, вы увидите, что это не topojson (us не имеет свойства, называемого объектами, отсюда и ваша ошибка). Проблема заключается в том, как вы используете d3.json - попробуйте d3.json("file", function(error, us) { ... map code ... }) (для v4 v5 будет другим).

Andrew Reid 03.02.2019 07:32

Спасибо. Ваш комментарий заставил меня понять, что в учебнике используется старый d3. Я переключился на это, и это работает - bl.ocks.org/adamjanes/6cf85a4fd79e122695ebde7d41fe327f

Sebastian 03.02.2019 19:42

Часть кода говорит .tickFormat(function(x, i) { return i ? x : x + "%"; }). Я прочитал? является встроенным оператором if/then. Означает ли это: для каждого индексированного значения i заменить x конкатом x и «%», а затем использовать этот новый массив для формата тиков?

Sebastian 03.02.2019 19:44

Для первого значения, i == 0, i равно false, поэтому к значению будет добавлен знак процента. Для всех остальных индексов просто верните значение. В легенде вы увидите, что только первое значение имеет знак процента.

Andrew Reid 03.02.2019 19:48

Итак, он говорит: верните i, если i ложно, то замените x на x + «%», иначе продолжите и верните x

Sebastian 03.02.2019 19:55

Кроме возвращения i, да. Расширяясь, i ? x : x + "%" можно переписать как if (i) return x; else return x + "%";, каждое значение i, отличное от 0, будет истинным, поэтому это изменит только x для нулевого индекса.

Andrew Reid 03.02.2019 20:04

@Sebastian Это тернарный оператор: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Gerardo Furtado 04.02.2019 01:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
130
0

Другие вопросы по теме