web-dev-qa-db-ja.com

TypeErrorの解決方法:d3.timeは未定義ですか?

D3.jsを使用してデータ/時間を解析したい。そのために、1つのJavaScriptファイルを作成し、var d3 = require('d3')を使用しました。 _npm install d3_を使用してD3をインストールし、_npm install d3 --save_ファイルに保存する_package.json_も試しました:

_{
  "name": "school",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "browserify": "^13.1.0",
    "bufferutil": "^1.2.1",
    "d3": "^4.2.2",
    "express": "^4.14.0",
    "guid": "0.0.12",
    "gulp": "^3.9.1",
    "react": "^15.3.1",
    "react-dom": "^15.3.1",
    "reactify": "^1.1.1",
    "utf-8-validate": "^1.2.1",
    "vinyl-source-stream": "^1.1.0",
    "websocket": "^1.0.23",
    "ws": "^1.1.1"
  }
}
_

しかし、私はこの例外に直面しています:

_TypeError: d3.time is undefined
_

プログラムコード:

_'use strict';

var d3 = require("d3");
var latency_arr = [];
var time_arr = [];
var timeFormat = d3.time.format('%H:%M:%S %L');

module.exports = {
  histogram: function(data) {
    console.log(data);
    return {

      getBin: function() {

        var jsonObject = JSON.parse(data);
        this.time_arr = jsonObject.time;
        for(var i = 0 ; i < this.time_arr.length ; i++){
            temp_time = this.time_arr[i];
            this.time_arr[i] = new Date(timeFormat.parse(temp_time));
        }
        return this.time_arr;
      },

      addValue: function(date, value) {
        return true;
      },

      getValues: function() {
        if(data !== undefined){
            var jsonObject = JSON.parse(data);
            this.latency_arr = jsonObject.latency;
            return this.latency_arr;
        }
      }
    };
  }
};
_

チェック:

_> var d3 = require('d3');
undefined
_

しかし、d3モジュールはnode_modulesディレクトリにあります。

なぜd3モジュールを認識しなかったのですか?何が欠けていますか?

14
kit

D3 v3の一部であったd3.timeプロパティをもう持たないD3v4.2.2が必要です。変更ログによると、 時間形式 は一般的な名前空間のフラット化の対象であり、したがって次のように名前が変更されました。

つまり、d3が未定義である場合、d3.timeオブジェクトは認識されます。コードをに変更する

var timeFormat = d3.timeFormat('%H:%M:%S %L');

トリックを行う必要があります。

35
altocumulus

D3モジュールが認識されます。 JSのすべての割り当ては何も返さないため、次の行を実行します

var d3 = require('d3');

返されるようにバインドされています...何もないため、チェックでundefined(確認のため、var a = 0コンソールで、undefinedレスポンスも取得します)。関数がモジュールで定義されておらず、モジュールがロードされていないようです。

モジュールのAPIをチェックして、正しい関数を使用していることを確認してください。

L.E.いくつかの問題を解決するために、ここにリンクがあります

https://github.com/d3/d3/blob/master/API.md#time-formats-d3-time-format

0
Silviu Preda