Шкалы D3 - почему умножение на 1 имеет значение?

1

Я работаю над пенсионным калькулятором/гистограммой с d3.js. Я построил гистограмму для отображения статического массива, а затем соединил диаграмму с моим уравнением выхода на пенсию.

Когда я подключил свою диаграмму к своему калькулятору, мой yScale был не прав, хотя входные массивы были одинаковыми. Я исправил это, изменив это:

const yScale = d3.scaleLinear().domain([0, d3.max(fvArr,(d)=>d[1])]).range([height-padding,0]);

к этому:

const yScale = d3.scaleLinear().domain([0, d3.max(fvArr,(d)=>d[1]*1)]).range([height-padding,0]);

Почему это работает? Codepen здесь.

  • 0
    Ваш пример Codepen ссылка недействительна
  • 1
    выглядит как какое-то преобразование. Что такое typeof d[1] ? Если это строка, возможно, Number(d[1]) исправит это.
Показать ещё 1 комментарий
Теги:
d3.js

1 ответ

2
Лучший ответ

Проблема в том, что ваши данные содержат строки, а не числа.

Если вы посмотрите на массив fvArr вы увидите это:

[[0, "30000"], [1, "32800"], [2, "35768"] etc...]

Итак, что умножение здесь делает, это просто приводит результат к числу. Проверь это:

console.log(typeof("5" * 1))

Это то же самое, что использование унарного плюса, что более распространено:

console.log(typeof(+"5"))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню