JavaScript函數(shù)方法集合

1.求平均值

//求平均值函數(shù)
var avgVal = function (averageArr) {
    var avg = 0;
    var sum = 0;
    for (var i = 0; i < averageArr.length; i++) {
        sum += averageArr[i];
    }
    avg = sum / averageArr.length;
    return avg;
}

//算出平均值
var avgX = avgVal(averageXArr)铸史;

2.把數(shù)組按照從大到小的順序排列

var arr =[9,1,0,8];
var sortNumber = function (a, b) {
    return b - a
};
var newSortArr = arr.sort(sortNumber);

3.數(shù)字千位分割

   function(num){
    if(num){
        return num.toString().replace(/^\d+/g, function(m){
            return m.replace(/(?=(?!^)(\d{3})+$)/g, ',');
        });
    }
    return 0;
  };

4.以今天為節(jié)點坝疼,顯示前三周及后一周的日期

var base = +new Date() - 23 * 24 * 3600 * 1000;
var oneDay = 24 * 3600 * 1000;
var dateData = [];

for (var i = 0; i < 28; i++) {
    var now = new Date((base += oneDay));
    dateData.push(
        [now.getMonth() + 1, now.getDate()].slice(0, 1) + "月" + [now.getMonth() + 1, now.getDate()].slice(1) + "日"
    );
}

5.根據(jù)圖片長寬比例顯示圖片是橫向還是縱向(顯示圖片的原始比例)

  var zooming = function (test) {
        var that = $(test).find('.zooming');//class為zooming的div
        var w = that.width();
        var h = that.height();
        var img = that.find('img');
        var src = img.attr('src');
        var image = new Image();
        image.src = src;
        image.onload = function () {
            var W = image.width;
            var H = image.height;
            if ((w / h) < (W / H)) {  //比如3:4小于4:3
                img.addClass('active');//橫向展示的樣式
            } else {
                img.removeClass('active');
            }
        }
    }
.zooming img{
    height:100%;
    width:auto;
}
.zooming img.active{
    width:100%;
    height:auto;
}

6.如果title中有#號禁荸,把#號替換成后邊f(xié)unction中的內(nèi)容

var title=('測試#' || "").replace(/\#([^\s]+)\#/g, function(a, b){
    return '<span class="chatItemSubTitle">' + b + "</span>";
}),
    

7.在三維數(shù)組中,求子數(shù)組中第一個和第三個元素在所有數(shù)據(jù)中最小的三個值

//比如如下三維數(shù)組异袄,求所有數(shù)組中第一個值和第四個值在所有數(shù)組中最小的兩個數(shù)組
    var arr=[
      [
        [1,55,9,56,"良"],
        [2,25,11,9,"優(yōu)"],
        [3,56,7,5,"良"],
      ],
      [
        [1,55,9,56,"良"],
        [2,25,11,21,"優(yōu)"],
        [3,56,7,63,"良"],
      ]
    ]

    var getDataMin = function (datas) {
        var arr = [],xArr=[],allData=[];
        for(var a=0;a<datas.length;a++){
            var categoryArr=datas[a];
            for (var i = 0; i < categoryArr.length; i++) {
                xArr.push(parseInt(categoryArr[i][0]));//所有數(shù)組的第一個數(shù)據(jù)             allData.push(datas[a][i]);
            }
        }
        
        var xArr1=xArr.slice();
       //按從小到大排序
        xArr.sort(function(a,b){return a-b;});
        
        var minValIndex=[],minXValIndex=[];
        var num,numX;//獲取最小的三個值再原數(shù)組中index
        for(var j=0;j<3;j++){
            var indexofXJ=xArr1.indexOf(xArr[j]);
        
            if(xArr1.indexOf(xArr[j-1])==indexofXJ){
                xArr1.splice(indexofXJ,1,'');//數(shù)組中相鄰的兩個值若相同則把其中一個設(shè)為''
                indexofXJ=indexofXJ+1;
            }
            numX=indexofXJ;
            minXValIndex.push(allData[numX][3]);
        }
        
        return {
            minXIndex:minXValIndex,
        };
    };

8.數(shù)字滾動效果

function(el, num, from){ //第一個為dom節(jié)點夫偶,第二個為數(shù)字
    from = from || 0;
    var step = Math.floor((num - from) / 20);  //滾動的間隔
    
    el.innerHTML = $we.str.formatThousands(from);
    var timeInterval = setInterval(function(){
        from = Math.min(from + step, num);  //當(dāng)沒到最大值時,繼續(xù)滾動
        el.innerHTML = $we.str.formatThousands(from);
        if(from >= num){
            clearInterval(timeInterval);
        }
    }, 20);
};

9.文字換行效果

function (str, n) {  //文字和英文都超過6個字節(jié)換行
        if (!str) {
            return "";
        }
        var cont = function (char) {
            var charCode = char.charCodeAt(0);
            if (charCode > 0 && charCode <= 128) {
                return 1;
            } else {
                return 2;
            }
        };
        var tmpN = cont(str[0]),
            ret = [str[0]],
            flag = 0,
            chCode;

        for (var i = 0; i + 1 < str.length; ++i) {
            chCode = cont(str[i + 1]);
            if (tmpN + chCode > n) {
                flag++;
                if (flag == 2) {
                    ret.splice(ret.length - 2, 2, "...");
                    return ret.join("");
                } else {
                    if(n==8){
                        ret.push("<br/>");
                        tmpN = 0;
                    }else{
                        ret.push("\n");
                       tmpN = 0;
                    }
                    
                }
            }
            tmpN += chCode;
            ret.push(str[i + 1]);
        }
        return ret.join("");
    };

10.JavaScript判斷是否是iPhone X系列機型

參考文章鏈接:https://cloud.tencent.com/developer/article/1537948

const isIphonex = () => {
      // X XS, XS Max, XR
      const xSeriesConfig = [
        {
          devicePixelRatio: 3,
          width: 375,
          height: 812
        },
        {
          devicePixelRatio: 3,
          width: 414,
          height: 896
        },
        {
          devicePixelRatio: 2,
          width: 414,
          height: 896
        }
      ] // h5
      if (typeof window !== 'undefined' && window) {
        const isIOS = /iphone/gi.test(window.navigator.userAgent)
        if (!isIOS) return false
        const { devicePixelRatio, screen } = window
        const { width, height } = screen
        return xSeriesConfig.some(
          item =>
            item.devicePixelRatio === devicePixelRatio &&
            item.width === width &&
            item.height === height
        )
      }
      return false
    }

    if (isIphonex()) {
     //do something
    }

11.原生js實現(xiàn)trigger方法

<button id="btn-1">Button-1</button>
<script>
    // 假如想通過點擊 Button-1 觸發(fā) window 的 resize 事件
    let btn_1 = document.getElementById('btn-1');
    btn_1.onclick = function () {
        var myEvent = new Event('resize');
        window.dispatchEvent(myEvent);
    }
</script>

參考文章

12.一維數(shù)組根據(jù)對象屬性轉(zhuǎn)二維數(shù)組

原數(shù)組:

var arr=[
    {
        divName: "宿遷市"
        population: 10012
        populationCity: 15300
        populationRate: 123
    },
    {
        divName: "上海市"
        population: 10015
        populationCity: 155300
        populationRate: 123
    }

轉(zhuǎn)成:

var arr2=[ 
    ['宿遷市','上海市']
    [10012, 10015]
    [15300, 155300]
    [123, 123]
]

js為:


 //把后臺傳過來的數(shù)據(jù)改成一個數(shù)組中按照屬性劃分為三個子數(shù)組的形式
 translateArray(arrayData) {
    let map=[];
    let map2 = {};
    let list = []; //總數(shù)組
 
    let array=arrayData.concat();
    
    let chartList = {
        divName: [],
        list: []
    };

    for(var a=0;a<Object.keys(array[0]).length;a++){
        map.push({})
    }

    while (array.length) {
        //獲取數(shù)組中單個對象
        let current = array.shift(); // 會影響原數(shù)組
        //取出單個對象中屬性的值
        let items = Object.values(current);
        //把對象的值作為鍵值對放到一個大對象中
        
        for (var i = 0; i < items.length; i++) {
            var keys = Math.random() + i;
            let defaultValue=items[i]==0?0:[]
            map[i][keys] = items[i]||defaultValue;
        }
        map2[current.divName] = map2[current.divName] || [];
    }

    let arr = [];
    map.forEach(function(item, index) {
        arr = Object.values(item); //大對象中屬性值取出放到數(shù)組中
        for (var j = 0; j < arr.length; j++) {
            arr[j] = Math.round(parseFloat(arr[j])*100)/100;//把字符串變成保留兩位小數(shù)的數(shù)字且四舍五入宙攻,不補位
        }
        list.push(arr);
    });

    chartList.divName = Object.keys(map2);
    chartList.list = list;
    return chartList;
}
}

13.根據(jù)傳入的日期格式來顯示日期

 function (ms, format){
    if(!ms){
        return "";
    }
    if((""+ms).match(/-/)){
        return ms;
    }
    var date = new Date();
    date.setFullYear(1970,1,1);
    date.setTime(0);
    date.setMilliseconds(ms);
    // return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
    // return (date.getMonth() + 1) + "-" + date.getDate();
    format = format || "M-d"; // y-M-d h:m:s
    var month = date.getMonth() + 1;
    return format.replace(/y/g, date.getFullYear())
        .replace(/M/g, (month))
        .replace(/d/g, (date.getDate()>9?date.getDate():"0"+date.getDate()))
        .replace(/h/g, (date.getHours()>9?date.getHours():"0"+date.getHours()))
        .replace(/m/g, (date.getMinutes()>9?date.getMinutes():"0"+date.getMinutes()))
        .replace(/s/g, (date.getSeconds()>9?date.getSeconds():"0"+date.getSeconds()));
};

14.獲取一段話的字符長度(包括漢字字母)

getTxtLength (str) { 

    if (!str) {
        return ;
    }
    var cont = function (char) {
        var charCode = char.charCodeAt(0);
        if (charCode > 0 && charCode <= 128) {
            return 1;
        } else {
            return 2;
        }
    };
    var tmpN = cont(str[0]),
        chCode;

    for (var i = 0; i + 1 < str.length; ++i) {
        chCode = cont(str[i + 1]);
        tmpN += chCode;
    }
    return tmpN;
},

15.頁面切換設(shè)置不同的背景音樂

function HTML5Audio(url, loop) {
    var audio = new Audio(url);
    audio.autoplay = true;
    audio.loop = loop || false; //是否循環(huán)
    audio.play();
    return {
        end: function(callback) {
            audio.addEventListener('ended', function() {
                callback()
            }, false);
        }
    }
}
var audio1 = HTML5Audio(playURl)
audio1.end(function() {
    Html5Audio(cycleURL, true)
})

16.在同一塊區(qū)域中,點擊切換顯示不同的圖片

var page = document.querySelector("#page");

//層級
var index = 10;
//切換切換
page.addEventListener("change",function(e){
    //頁面元素
    var pageElement = document.querySelector("." + e.target.value)
    pageElement.style.zIndex = ++index; //根據(jù)index顯示不同的頁面
},false)
    <section class="container">
        <!-- 第一幅畫面 -->
        <section class="page-a bg-adaptive">
        </section>
        <!-- 第二幅畫面 -->
        <section class="page-b bg-adaptive">
        </section>
        <!-- 第三幅畫面 -->
        <section class="page-c bg-adaptive">
        </section>
    </section>
    選擇頁面:
    <select id="page">
        <option value="page-a" selected="">1</option>
        <option value="page-b">2</option>
        <option value="page-c">3</option>
    </select>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末介褥,一起剝皮案震驚了整個濱河市座掘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呻顽,老刑警劉巖雹顺,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異廊遍,居然都是意外死亡,警方通過查閱死者的電腦和手機贩挣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門喉前,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人王财,你說我怎么就攤上這事卵迂。” “怎么了绒净?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵见咒,是天一觀的道長。 經(jīng)常有香客問我挂疆,道長改览,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任缤言,我火速辦了婚禮宝当,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胆萧。我一直安慰自己庆揩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布跌穗。 她就那樣靜靜地躺著订晌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚌吸。 梳的紋絲不亂的頭發(fā)上锈拨,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音套利,去河邊找鬼推励。 笑死鹤耍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的验辞。 我是一名探鬼主播稿黄,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼跌造!你這毒婦竟也來了杆怕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壳贪,失蹤者是張志新(化名)和其女友劉穎陵珍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體违施,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡互纯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了磕蒲。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留潦。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辣往,靈堂內(nèi)的尸體忽然破棺而出兔院,到底是詐尸還是另有隱情,我是刑警寧澤站削,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布坊萝,位于F島的核電站,受9級特大地震影響许起,放射性物質(zhì)發(fā)生泄漏十偶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一街氢、第九天 我趴在偏房一處隱蔽的房頂上張望扯键。 院中可真熱鬧,春花似錦珊肃、人聲如沸荣刑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厉亏。三九已至,卻和暖如春烈和,著一層夾襖步出監(jiān)牢的瞬間爱只,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工招刹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恬试,地道東北人窝趣。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像训柴,于是被迫代替她去往敵國和親哑舒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • JavaScript語言精粹 前言 約定:=> 表示參考相關(guān)文章或書籍; JS是JavaScript的縮寫幻馁。 本書...
    微笑的AK47閱讀 581評論 0 3
  • 概要 64學(xué)時 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,208評論 0 3
  • JS基礎(chǔ) 頁面由三部分組成:html:超文本標(biāo)記語言洗鸵,負(fù)責(zé)頁面結(jié)構(gòu)css:層疊樣式表,負(fù)責(zé)頁面樣式j(luò)s:輕量級的腳...
    小賢筆記閱讀 603評論 0 5
  • 今年已完成: 紙質(zhì)書29本仗嗦,電子書108本膘滨,不算上電子周刊31本,累計讀了467本 隨筆游記書評12篇稀拐,累計35篇...
    如果miya閱讀 483評論 0 1
  • 《鬼吹燈》中王胖子火邓,名叫王凱旋,男二號德撬,性格比較二贡翘,嘴碎廢話多,大大咧咧砰逻,百步穿楊身手不凡,出身部隊大院泛鸟。 王胖子...
    傅悅天閱讀 603評論 0 5