Ответ 1
Функция D3 data()
принимает необязательный второй аргумент, который предназначен для обеспечения такого соответствия между данными и узлами DOM. Попробуйте следующее:
d3.selectAll('polygon').data(array_of_data, function(d) { return d.id; });
Второй аргумент data()
- это функция обратного вызова, которая при вызове с нулевой точкой возвращает ключ, связывающий каждый DOM node с соответствующей базой данных. Когда вы не предоставляете такую функцию, D3 остается без опции, но для использования индекса для привязки данных к узлам DOM.