calcOrig.mjs

import map from 'lodash-es/map.js'


/**
 * 計算各週期之原始數值Orig(Original Value,逐筆直接複製輸入數值,不做任何運算)
 *
 * 僅逐筆對應輸入,不做視窗/累積運算,亦不篩選或檢查數值合法性;資料筆數與輸入相同,缺key欄位或非數值時param為undefined或原樣值,該筆仍保留
 * 固定回傳單一區塊,period為'none',len為0
 *
 * Unit Test: {@link https://github.com/yuda-lyu/w-data-trade/blob/master/test/unit-calcOrig.test.mjs Github}
 * @function
 * @param {Array} arr 輸入K線陣列,各元素需含time與計算所用之數值欄位
 * @param {String} key 輸入計算所用數值欄位名稱字串,例如'Close'
 * @returns {Promise} 回傳Promise,resolve為單一結果陣列,元素為{period,len,vs},period固定為'none',len固定為0,vs內各元素為{time,param}
 * @example
 *
 * let arr = [
 *     { time: '2020-01-01T00:00:00', Close: 7173.32 },
 *     { time: '2020-01-01T04:00:00', Close: 7195.23 },
 *     { time: '2020-01-01T08:00:00', Close: 7225.01 },
 * ]
 *
 * calcOrig(arr, 'Close')
 *     .then((rs) => {
 *         console.log(rs[0])
 *         // => {
 *         //   period: 'none',
 *         //   len: 0,
 *         //   vs: [
 *         //     { time: '2020-01-01T00:00:00', param: 7173.32 },
 *         //     { time: '2020-01-01T04:00:00', param: 7195.23 },
 *         //     { time: '2020-01-01T08:00:00', param: 7225.01 }
 *         //   ]
 *         // }
 *     })
 *
 */
let calcOrig = (() => {

    let calcOrig = async(arr, key) => {

        //rs
        let rs = map(arr, (v) => {
            return {
                time: v['time'],
                param: v[key], //統一參數名param, 提取Close做為param
            }
        })

        //rrs
        let rrs = [
            {
                period: 'none',
                len: 0,
                vs: rs,
            }
        ]

        return rrs
    }

    return calcOrig
})()


export default calcOrig