目前分類:JavaScript (31)

瀏覽方式: 標題列表 簡短摘要
let data: Model.IFilterData[] = JSON.parse(JSON.stringify(this.originalFilterData));
        let filterKeys: { key: string, value: string }[] = {
            { key: 'name', value: "Name" },
            { key: 'age', value: "Age" },
            { key: 'id', value: "Id" },
            { key: 'email', value: "Email" },
        };
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

// way 1
setTimeout(() => {
    let convertData = resolveDataString(DataString);
    console.log(`convertData  => `, convertData);
}, 0);
文章標籤

bingzhichen 發表在 痞客邦 留言(2) 人氣()

 
setTimeout(() => {
    let convertData = resolveData(Data);
    console.log(`convertData => `, convertData);
}, 0);
 
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

       
        /**
         * Please use TypeScript/JS to answer question
         * Welcome to answer with unit testing code if you can
         *
         * After you finish coding, please push to your GitHub account and share the link with us.
         */
        // Please write a function to reverse the following nested input value into output value
 
        // Input:
        const inputValue: Object = {
            aa: {
                bb: {
                    cc: {
                        dd: {
                            ee: {
                                ff: {
                                    gg: {
                                        hh: 'final',
                                    },
                                },
                            },
                        },
                    },
                },
            },
        };
 
        // Output:
        const outputValue: Object = {
            final: {
                hh: {
                    ff: {
                        ee: {
                            dd: {
                                cc: {
                                    bb: {
                                        aa: 'final',
                                    },
                                },
                            },
                        },
                    },
                },
            },
        };
 
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

    private formTextareaAuto(): void {
        var textarea = document.getElementsByTagName('textarea');
        setTimeout(() => {
            for (var i = 0i < textarea.lengthi++) {
                textarea[i].style.height = 'auto';
                textarea[i].scrollTop = 0//防抖動
                //有可能這個初始化高度賦值沒有賦上去
                textarea[i].style.height = textarea[i].scrollHeight + 'px';
                textarea[i].addEventListener('input', (e: any=> {
                    e.target.style.height = 'auto';
                    e.target.scrollTop = 0//防抖動
                    e.target.style.height = e.target.scrollHeight + 'px';
                });
            }
        }, 200);
    }

bingzhichen 發表在 痞客邦 留言(0) 人氣()

<template>
    <div class="animated fadeIn">

        <div class="flex-right">

            <date-picker
                :format="datetime.FormatDate"
                :title-format="datetime.FormatDate"
                :placeholder="_('w_DateSelectDates')"
                :range="true"
                :clearable="false"
                type="date"
                class="col-md-3"
                v-model="inputDatum.dateRange"
                @input="updateDateRange"

            >
                <template v-slot:sidebar="{ emit }">
                    <div style="text-align: left">
                        <button class="mx-btn mx-btn-text col-md-12" @click="selectToday(emit)">Today</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectYesterday(emit)">Yesterday</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectLast7days(emit)">Last 7 days</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectThisWeek(emit)">This Week</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectLastWeek(emit)">Last Week'</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectThisMonth(emit)">This Month</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectLastMonth(emit)">Last Month</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectQ1(emit)">Q1</button>
                        
                        <button class="mx-btn mx-btn-text col-md-12" @click="selectQ2(emit)">Q2</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectQ3(emit)">Q3</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectQ4(emit)">Q4</button>

                        <button class="mx-btn mx-btn-text col-md-12" @click="selectThisYear(emit)">This Year</button>
                    </div>
                </template>
            </date-picker>
        </div>
    </div>
</template>

文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

<template>
   <div>
      <b-col cols="6">
         <b-button
            variant="primary"
            @click="pdfExport"
         >
            <i class="fa fa-file-pdf-o"></i>
            &nbsp;
            Export PDF
         </b-button>
      </b-col>
   </div>
</template>

文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

<template>
   <div>
      <p class="title-date" v-if="isTitle">Select Dates</p>
      <vue-ctk-date-time-picker
         :no-label="true"
         :range="true"
         :custom-shortcuts="shortcuts"
         formatted="YYYY/MM/DD"
         format="YYYy/MM/DD"
         disabled-dates="disabledDates"
         v-model="date"
         @is-hidden="validateDate"
         @validate="validateDate"
         id="range"
      >

      </vue-ctk-date-time-picker>
   </div>
</template>
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

          interface IEnteredExitedSubtotal {
          Hour: number;
          Today: number;
          Total: number;
          TotalInTimeSection: number;
         }

         interface IInsideSubtotal {
          Total: number;
         }

         interface CameraData {
          Channel: number;
          EnteredSubtotal: IEnteredExitedSubtotal;
          ExitedSubtotal: IEnteredExitedSubtotal;
          InsideSubtotal: IInsideSubtotal;
          RuleName: string;
          UTC: number;
         }


         let data = `summary.Channel=123
summary.EnteredSubtotal.Hour=22
summary.EnteredSubtotal.Today=60
summary.EnteredSubtotal.Total=1769
summary.EnteredSubtotal.TotalInTimeSection=60
summary.ExitedSubtotal.Hour=19
summary.ExitedSubtotal.Today=52
summary.ExitedSubtotal.Total=1705
summary.ExitedSubtotal.TotalInTimeSection=52
summary.InsideSubtotal.Total=324
summary.RuleName=NumberStat
summary.UTC=1565870249`;
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

    // 注意:回傳值都為string格式,如果要日期格式,
        請使用 new Date(this.getDateCount);

    // 格式化日期
    formatDate(dateArg: any): string {
        const date = new Date(dateArg);
        const year = date.getFullYear();
        const month = date.getMonth() + 1;
        const day = date.getDate();
        const formatMonth = month < 10 ? `0${month}` : month;
        const formatDay = day < 10 ? `0${day}` : day;

        return `${year}-${formatMonth}-${formatDay}`
// set Date to 00:00:00
DateToZero(value: Date): Date {
    let date = new Date(value.getTime());
    date.setHours(0, 0, 0, 0);
    return date;
}
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

// 小時
for (let i = 0; i < 25; i++) {
    const tempHour =
        i === 24 ? "00" : i < 10 ? "0" + i.toString() : i.toString();
    const tempValue =
        tempHour + ":00" + (i < 12 || i > 23 ? " am" : " pm");
    const tempObject = { value: i.toString(), text: tempValue };
    this.dayRanges.hours.push(tempObject);
}

// 分鐘
for (let i = 0; i < 60; i++) {
    const tempMinute =
        i === 60 ? "00" : i < 10 ? "0" + i.toString() : i.toString();
    const tempObject = { value: i.toString(), text: tempMinute };
    this.dayRanges.minutes.push(tempObject);
}
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

連動式下選單,分三部份

1. templeate

2. 資料結構

3. function

不使用套件

文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

驗證網址:https://www.regextester.com/22

const ipRegex = 
/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)
{3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;

const portRegex = 
/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|
65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/;
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

<form-string
    :label="_('w_License_License_Key')"
    v-model="inputLicenseData.licenseKey"
    :placeholder="_('w_License_License_KeyPlaceholder')"
    :maxlength="29"
></form-string>

// ts寫法
// 限輸入英文、數字,格式:xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
@Watch("inputLicenseData.licenseKey")
valueChange(value) {
    this.$nextTick(() => {
        this.inputLicenseData.licenseKey = value 
        .replace(/\s/g, "") .replace(/[^0-9a-zA-Z]/g, "") 
        .replace(/([0-9a-zA-Z]{5})(?=[0-9a-zA-Z])/g, "$&-");
    });
}
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

getTwoPointAngle(px1: number, py1: number, px2: number, py2: number) {
    const x = Math.abs(px1 - px2);
    const y = Math.abs(py1 - py2);

    const z = Math.sqrt(x * x + y * y);

    const angle = Math.round((Math.asin(y / z) / Math.PI) * 180); //最終角度

    return angle;
}
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

根據經緯度計算與正北方向的夾角,以順時針為方向的角度

參考:https://software.intel.com/en-us/blogs/2012/11/30/calculating-a-bearing-between-points-in-location-aware-apps

以下的公式,可以在下列網址驗證

https://www.igismap.com/map-tool/bearing-angle

https://www.sunearthtools.com/tools/distance.php#contents

文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

1. 使用函數內部的變數在函數執行完後,仍然存活在記憶體中(延長了區域變數的生命周期)
2. 讓函數外部可以操作(讀 / 寫)到函數內部的數據(變數 / 函數)

問題:
  1. 函數執行完後,函數內部聲明的區域變數是否還存在?
-- 一般是不存在的,但如果是存在於閉包中的變數才可能存在
  2. 在函數外部能直接訪問函數內部的區域變數嗎?
-- 不能,但可以通過閉包讓外部操作它
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

1. 如何產生閉包?
-- 當一個嵌套的內部(子)函數引用了嵌套的外部(父)函數的變數(函數)時,就產生了閉包
2. 閉包到底是什麼?
-- 使用chrome調試查看
-- 理解一: 閉包是嵌套的內部函數(絕大部分人)
-- 理解二: 包含被引用變數(函數)的對像(極少數人)
-- 注意: 閉包存在於嵌套的內部函數中
3. 產生閉包的條件?
--  函數嵌套
--  內部函數引用了外部函數的數據(變數 / 函數)
--  執行外部函數
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

1. 變數聲明提升 / 變數提升
-- 通過var定義(聲明)的變數,在定義語句之前就可以訪問到
-- 值:undefined
2. 函數聲明提升 / 函數提升
-- 通過function聲明的函數,在之前就可以直接調用
-- 值:函數定義(對象)
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

1. 原型鏈
-- 訪問一個物件的屬性時,
---- 先在自身屬性中查找,找到返回
---- 如果沒有,再沿著__proto__這條鏈向上查找,找到返回
---- 如果最終沒找到,返回undefined
--  別名: 隱式原型鏈
--  作用: 查找物件的屬性(方法)
2. Function = new Function():實例對象才有隱式原型(屬性)__proto__   而實例對象的隱式原型(屬性)__proto__ 等於 構造函數的顯式原型(屬性)prototype
3. 所有函數的隱式原型(屬性)__proto__都是一樣的
文章標籤

bingzhichen 發表在 痞客邦 留言(0) 人氣()

1 2