我想得到这个模块计算的数字,它返回了一个对象。
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') {
...
}
}
}
答案 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
。