节点js module.exports获取对象

时间:2018-04-30 19:21:16

标签: node.js

我想得到这个模块计算的数字,它返回了一个对象。

module.exports = function calculate (s, key, k, d) {
  if (!k) k = 14
  if (!d) d = 3
  if (s.lookback.length >= k + d * 2) {
    let stochK = []
    for (let j = 0; j < d; j++) {
      let stochs = []
      for (let i = 0; i < d; i++)
        stochs.push((function(x, length) {
          let low = [], high = []
          x.slice(0, length).forEach(function (period) {
            low.push(period.low)
            high.push(period.high)
          })
          return 100 * (x[0].close - Math.min(...low)) / (Math.max(...high) - Math.min(...low))
        })(s.lookback.slice(i+j), k))
      stochK.push(stochs.reduce((sum, cur) => { return sum + cur }, 0) / d)
    }
    let stochD = stochK.reduce((sum, cur) => { return sum + cur }, 0) / d
    s.period[key] = { K: stochK[0], D: stochD }
  }
}

当我想得到

的结果时
K: stochK[0]

致电

s.period.calculate.K

我收到了这个错误:

TypeError: Cannot read property "K" of undefined

获取K的正确方法是什么?

部分导入代码:

var calculate = require('../../../lib/calculate')

module.exports = {
...
  onPeriod: function (s, cb) {
    if (s.in_preroll) return cb()
    if (typeof s.period.calculate.K === 'number') {
    ...
      }
   }
}

1 个答案:

答案 0 :(得分:0)

在您的情况下SELECT是函数的名称,因此您必须调用函数才能使用它。

我在这里假设很多,但我觉得你的代码应该是:

calculate

在任何情况下都必须填充onPeriod: function (s, cb) { if (s.in_preroll) return cb() calculate(s, 'calculate', k, d) // k and d should be specified? if (typeof s.period.calculate.K === 'number') { ... } } 或函数将崩溃。该函数的作用是操纵s.period,因此如果您需要s.period[key],则需要将s.period.calculate设置为key