最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript學(xué)習(xí)筆記之?dāng)?shù)組求和方法

 更新時間:2016年03月23日 10:44:37   作者:Airen  
這篇文章主要介紹了JavaScript學(xué)習(xí)筆記之?dāng)?shù)組求和方法的相關(guān)資料,需要的朋友可以參考下

推薦閱讀:JavaScript學(xué)習(xí)筆記之?dāng)?shù)組的增、刪、改、查

通過最近學(xué)習(xí),越來越感覺JavaScript的強(qiáng)大與魅力之處,僅數(shù)組一個知識點就讓我這樣的初學(xué)者折騰了很久。折騰是折騰,但還是很有效果的,這幾天的學(xué)習(xí)到的一些基本知識,就在自己的業(yè)務(wù)就用到了。頓感自信心爆棚,我也有一天能學(xué)會JavaScript。

別的不多說了,咱們今天一起來玩數(shù)組的求和,看看有哪些方法可以實現(xiàn)數(shù)組的求和。

數(shù)組方法

JavaScript中數(shù)組有很多種方法,下圖能更好的向你闡述JavaScript有多少種方法,作用是啥:

簡單點回顧一下前面學(xué)習(xí)的知識:

push():向數(shù)組末尾添加一個或多個元素

unshift(): 向數(shù)組的開頭添加一個或多個元素

pop(): 刪除數(shù)組最后一個元素

shift(): 刪除數(shù)組第一個元素

sort(): 給數(shù)組排序

reverse(): 顛倒數(shù)組項在數(shù)組中的位置

concat(): 合并數(shù)組

slice(): 指定的位置開始刪除指定的數(shù)組項,并且將刪除的數(shù)組項構(gòu)建成一個新數(shù)組

splice(): 對一個數(shù)組做刪除、插入和替換

indexOf(): 從前向后查找元素在數(shù)組中位置

lastIndexOf(): 從后向前查找元素在數(shù)組中位置

forEach()、every()、some()、filter()和map():數(shù)組迭代

reduce(): 數(shù)組中的每個值(從左到右)開始合并,最終為一個值

reduceRight(): 數(shù)組中的每個值(從右到左)開始合并,最終為一個值

數(shù)組求和

今天的用例,假設(shè)我們有一個這樣的數(shù)組:

var arr = [0,1,2,3,4,5,6,7,8,9];

需要將數(shù)組中的項值加起來0+1+2+3+4+5+6+7+8+9。我們應(yīng)該怎么做,或者有哪些方法可以實現(xiàn)。簡單的講,就是想辦法讓數(shù)組項一個一個加起來。那是不是就要用到數(shù)組的迭代呢?是不是也可以借助這些方法實現(xiàn)數(shù)組的求和呢?

for循環(huán)和while循環(huán)

首先想到的就是這兩種循環(huán)方法,這在上一節(jié)也嘗試過了。再次啰嗦一下:

// 求和:for循環(huán)遍歷數(shù)組arr
(function() {
var sum = 0;
function getSum(array){
for (var i = 0; i < array.length; i++){
sum += parseInt(array[i]);
}
return sum;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++){
sum = 0;
getSum(arr);
}
console.timeEnd("getSum"); // 7877.155ms
console.log("使用for循環(huán):sum = " + sum); // 45
})();

再來換個while看看:

(function () {
var sum = 0;
function getSum(array) {
var i = array.length;
while (i--) {
sum += parseInt(array[i]);
}
return sum;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++) {
var sum = 0;
getSum(arr);
}
console.timeEnd("getSum"); // getSum: 7690.056ms 
console.log("使用while循環(huán):sum=" + sum); // 使用while循環(huán):sum=45
})();

除了古老的for和while循環(huán)之外,在ES5中還新增加了其他的數(shù)組迭代方法,比如forEach()、every()、some()、filter()和map()等。而且這些方法都可以讓數(shù)組中的每一個元素執(zhí)行一次回調(diào)函數(shù)。如果一來,只需要對這個回調(diào)函數(shù)做一個數(shù)組項的累加功能:

function getSum (item, index, array){
sum += item;
}

forEach()方法

forEach()方法讓數(shù)組每一項執(zhí)行給定的回調(diào)函數(shù)callbackfn。這樣,我們可以在回調(diào)函數(shù)getSum做一個累加計算。

(function (){
var sum = 0;
function getSum (item, index, array){
sum += item;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++){
var sum = 0;
arr.forEach(getSum);
}
console.timeEnd("getSum"); // getSum: 1348.212ms
console.log("使用forEach循環(huán):sum=" + sum); // 使用forEach循環(huán):sum=45
})()

some()方法

(function (){
var sum = 0;
function getSum (item, index, array){
sum += item;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++){
var sum = 0;
arr.some(getSum);
}
console.timeEnd("getSum"); // getSum: 1038.737ms
console.log("使用some循環(huán):sum=" + sum); // 使用some循環(huán):sum=45
})()

map()方法

(function (){
var sum = 0;
function getSum (item, index, array){
sum += item;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++){
var sum = 0;
arr.map(getSum);
}
console.timeEnd("getSum"); // getSum: 4568.558ms
console.log("使用map循環(huán):sum=" + sum); // 使用map循環(huán):sum=45
})()

filter()方法

(function (){
var sum = 0;
function getSum (item, index, array){
sum += item;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++){
var sum = 0;
arr.filter(getSum);
}
console.timeEnd("getSum"); // getSum: 1117.039ms
console.log("使用filter循環(huán):sum=" + sum); // 使用filter循環(huán):sum=45
})()

every()方法

every()方法和前面幾種方法略有不同,因為every()方法只有數(shù)組中每一項執(zhí)行回調(diào)函數(shù)結(jié)果合部為true才會返回,不然就會返回false。因為在前面的回調(diào)函數(shù)中,需要增加return true;

(function() {
var sum = 0;
function getSum(item, index, array) {
sum += item;
return true;//由于every方法是會在遇到回調(diào)函數(shù)返回的第一個false時停止遍歷所以需要始終返回true
};
console.time("getSum");
for (var i = 0; i < 1000000; i++){
sum = 0;
arr.every(getSum);
}
console.timeEnd("getSum"); // 1028.892ms
console.log("使用every循環(huán):sum = " + sum); // 使用every循環(huán):sum = 45
})();

reduce()和reduceRight()方法

reduce()和reduceRight()方法可以接受一個回調(diào)函數(shù)callbackfn作為累加器(accumulator),數(shù)組中的每個值(從左到右)開始合并,最終為一個值。這樣也能讓數(shù)組每個元素累加起來,達(dá)到數(shù)組求和的功能。

先創(chuàng)建一個累加器的回調(diào)函數(shù):

function getSum(preValue,curValue,index,array) {
return preValue += curValue;
}

同樣以前面的數(shù)組為例:

function getSum(preValue,curValue,index, array) {
return preValue + curValue;
}
console.time("getSum");
for (var i = 0; i < 1000000; i++){
sum = arr.reduce(getSum, 0)
}
console.timeEnd("getSum"); // 3257.201ms
console.log("使用reduce循環(huán):sum = " + sum); // 使用reduce循環(huán):sum = 45

前面測試,reduce()方法所費時間最短,本篇在測試似乎所費時間最長,不知道在哪出錯了,還望有大神能指導(dǎo)迷津。
reduceRight()方法和reduce()方法一樣,只是他從數(shù)組的右邊向左邊累加。

總結(jié)

一個一個操作下來,數(shù)組的求和基本上通過數(shù)組遍歷來實現(xiàn),那么掌握了數(shù)組中各種遍歷的方法,就能輕松的實現(xiàn)數(shù)組的求和。雖然這些遍歷的方法能讓實現(xiàn)數(shù)組的求和,但是不同的方法對性能有所不同。文章中的示例可能無法完全闡述他們性能方面的對比,如果您有更好的建議歡迎分享。

以上內(nèi)容是針對JavaScript學(xué)習(xí)筆記之?dāng)?shù)組求和方法的全部介紹,希望對大家有所幫助!

相關(guān)文章

  • 淺析JavaScript聲明變量

    淺析JavaScript聲明變量

    JavaScript的變量聲明語句無論出現(xiàn)在何處,都會先于其他代碼首先被執(zhí)行,本文給大家介紹javascript聲明變量相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • 微信小程序獲取驗證碼60秒倒計時功能

    微信小程序獲取驗證碼60秒倒計時功能

    這篇文章主要介紹了微信小程序獲取驗證碼60秒倒計時模板,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 詳解如何用JavaScript編寫一個單元測試

    詳解如何用JavaScript編寫一個單元測試

    測試代碼是確保代碼穩(wěn)定的第一步。能做到這一點的最佳方法之一就是使用單元測試。這篇文章主要介紹了如何用JavaScript編寫你的第一個單元測試,感興趣的可以了解一下
    2022-11-11
  • 自適應(yīng)方案postcss-pxtorem使用步驟

    自適應(yīng)方案postcss-pxtorem使用步驟

    這篇文章主要介紹了如何使用postcss-pxtorem插件將px單位轉(zhuǎn)換為rem單位,包括安裝插件、創(chuàng)建配置文件和引入腳本的步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Javascript實現(xiàn)時間倒計時功能

    Javascript實現(xiàn)時間倒計時功能

    這篇文章主要為大家詳細(xì)介紹了Javascript實現(xiàn)時間倒計時功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作

    js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作

    這篇文章主要介紹了js仿QQ中對聯(lián)系人向左滑動、滑出刪除按鈕的操作,即編寫一個js向左滑動刪除 交互特效的插件,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JS設(shè)計模式之狀態(tài)模式概念與用法分析

    JS設(shè)計模式之狀態(tài)模式概念與用法分析

    這篇文章主要介紹了JS設(shè)計模式之狀態(tài)模式概念與用法,簡單講述了狀態(tài)模式的概念、功能、應(yīng)用場景并結(jié)合javascript實例形式分析了狀態(tài)模式的簡單定義及使用方法,需要的朋友可以參考下
    2018-02-02
  • 從零開始用electron手?jǐn)]一個截屏工具的示例代碼

    從零開始用electron手?jǐn)]一個截屏工具的示例代碼

    這篇文章主要介紹了從零開始用electron手?jǐn)]一個截屏工具的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • JS實現(xiàn)CheckBox復(fù)選框全選、不選或全不選功能

    JS實現(xiàn)CheckBox復(fù)選框全選、不選或全不選功能

    CheckBox控件就是我們一般所說的復(fù)選框,通常用于某選項的打開或關(guān)閉,如一次性處理多個產(chǎn)品,或?qū)ξ恼碌膭h除、產(chǎn)品的下架等處理,一條一條的點顯然有一些麻煩,如果能每一行放一個checkbox,然后統(tǒng)一處理就好辦的多了,需要的朋友可以參考下
    2016-02-02
  • 對存在JavaScript隱式類型轉(zhuǎn)換的四種情況的總結(jié)(必看篇)

    對存在JavaScript隱式類型轉(zhuǎn)換的四種情況的總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄獙Υ嬖贘avaScript隱式類型轉(zhuǎn)換的四種情況的總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

永春县| 绥化市| 嘉义县| 丹江口市| 鸡泽县| 秭归县| 罗江县| 凉山| 鄂托克旗| 建始县| 大悟县| 奉新县| 千阳县| 阿合奇县| 健康| 兴文县| 周口市| 沅江市| 缙云县| 遂昌县| 晴隆县| 西昌市| 襄城县| 博客| 石景山区| 连平县| 怀来县| 新丰县| 苗栗县| 河池市| 保亭| 上犹县| 和林格尔县| 忻城县| 肇源县| 噶尔县| 广丰县| 综艺| 林西县| 崇义县| 仙桃市|