tickFormat объединен

#javascript #d3.js

#javascript #d3.js

Вопрос:

Для моей оси у меня есть следующее tickFormat

 .tickFormat(data.map(function (d) {
    if(ChartJourney.group_by == 'weeks') {
        console.log(moment(d.date).format('YYYY-WW'));
        return moment(d.date).format('YYYY-WW');
    } else
        return d.date;
}));
  

В консоли я вижу это:

 2015-23
2015-24
2015-25
2015-26
  

Но на графике я вижу 4 тика, все в том же формате, что и:

2015-23,2015-24,2015-25,2015-26

Почему формат разделяется запятыми таким образом для каждого тика? Особенно, когда с консоли я вижу, что он повторяется только 4 раза.

Ответ №1:

Удалите data.map:

 .tickFormat(function (d) {
    if(ChartJourney.group_by == 'weeks') {
        console.log(moment(d.date).format('YYYY-WW'));
        return moment(d.date).format('YYYY-WW');
    } else
        return d.date;
});
  

.tickFormat может принимать функцию или объект. Когда вы используете функцию, функция будет вызываться для каждой точки данных. Это то, что вы хотите. Если вы не используете функцию, значение будет использоваться для каждого тика. Когда вы используете data.map, карта будет оценена сразу. Вы будете вызывать .tickFormat с отображенным массивом (не функцией), который будет использоваться для каждого тика.

Комментарии:

1. Но что такое d ? As data — это то, где находятся мои данные… таким образом, его удаление означает, что d.date теперь вернет undefined. Даже если я заменю его d на data , он все равно будет неопределенным, поскольку мы не выполняем цикл через него, как с map .

2. Ах. Оказывается, это должно быть просто d и не d.date .

Ответ №2:

Мне не только нужно удалить карту согласно сообщению @Marcelo, но также она должна быть просто d вместо d.date :

 .tickFormat(function (d) {
    if(ChartJourney.group_by == 'weeks') {
        console.log(moment(d).format('YYYY-WW'));
        return moment(d).format('YYYY-WW');
    } else
        return d;
});