# arrAt.mjs

    import range from 'lodash/range'
    import at from 'lodash/at'
    import isearr from './isearr.mjs'
    import isp0int from './isp0int.mjs'
    import iser from './iser.mjs'
    import cint from './cint.mjs'

    /**
     * 由vall陣列提取指定欄位(或欄位範圍)之資料
     * 若istart與iend有效, 提取istart~iend欄位
     * 若僅istart有效, 提取istart欄位
     *
     * Unit Test: {@link https://github.com/yuda-lyu/wsemi/blob/master/test/arrAt.test.mjs Github}
     * @memberOf wsemi
     * @param {Array} vall 輸入要被提取的任意資料陣列
     * @param {Integer} istart 輸入起始的欄位指標整數
     * @param {Integer} [iend=null] 輸入結束的欄位指標整數，若不使用則等同於istart，預設null
     * @returns {Array} 回傳提取的任意資料陣列
     * @example
     *
     * console.log(arrAt([1, 2, 3, '4', 5, 'abc'], 1))
     * // => [2]
     *
     * console.log(arrAt([1, 2, 3, '4', 5, 'abc'], 1, 4))
     * // => [2, 3, '4', 5]
     *
     */
    function arrAt(vall, istart, iend = null) {

        //check
        if (!isearr(vall)) {
            return []
        }
        if (!isp0int(istart)) {
            return []
        }
        else {
            istart = cint(istart)
        }

        let t
        if (!iser(iend)) {

            //check
            if (!isp0int(iend)) {
                return []
            }
            else {
                iend = cint(iend)
            }

            //check
            if (istart >= vall.length || iend >= vall.length) {
                return []
            }

            let inds = range(istart, iend + 1)
            t = at(vall, inds)

        }
        else {

            //check
            if (istart >= vall.length) {
                return []
            }

            t = at(vall, istart)

        }

        return t
    }

    export default arrAt