日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript数组结构与算法——数组详解(中)

發布時間:2023/12/31 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript数组结构与算法——数组详解(中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

迭代器方法

在上篇中,我們探討了很多數組方法,接下來總結一下最后一組方法——迭代器方法。這些方法對數組的每個元素應用一個函數,可以返回一個值、一組值、或者一個新數組。

1、不生成新數組的迭代器方法

以下這組迭代器方法不產生任何新數組,它們要么對數組中的每個元素執行某種操作,要么返回一個值。

1.1 forEach()

此方法接受一個函數作為參數,對數組中的每個元素使用該函數。

function square(num) {console.log(num + '的平方為: ' + num * num)}var nums = [1, 2, 3, 4, 5]nums.forEach(square)

以上方法用于求數組nums中每個元素的平方,運行結果如下:


1.2 every()

此方法接受一個返回值為boolean類型的函數,對數組中的每個元素使用該函數,該函數返回值全部為true的話,every()才會返回true,否則返回false。

function isOdd(num) {return num % 2 !== 0}var array = [1, 2, 3, 4, 5]var odd = array.every(isOdd)if(odd) {console.log('此數組中所有元素都為奇數')} else {console.log('此數組中并非所有元素為奇數')}

以上代碼中,將用戶判斷元素是否是奇數的函數作為參數傳給every(),當調用every()的數組中元素全部為奇數時,返回值為true,否則為false。運行結果如下:


1.3 some()

此方法與every()類似,區別在于傳給some()的函數中,只要有一個返回true,此方法就返回true。

簡單測試一下:

function hasOdd(num) {return num % 2 !== 0}var array = [1, 2, 3, 4, 5]var odd = array.some(hasOdd)if(odd) {console.log('此數組中有奇數')} else {console.log('此數組中沒有奇數')}

以上代碼判斷了數組元素中是否存在奇數,輸出結果為“此方法中有奇數”。

1.4 reduce()

此方法接受一個函數,從一個累加值開始,不斷地對累加值和數組中的后續元素調用該函數,直到數組的最后一個元素,最后返回得到的累加值。以下為使用reduce()求數組中元素和的例子。

function add(total, num) {return total + num}var array = [1, 2, 3, 4, 5]var odd = array.reduce(add)console.log(odd)

結果如下:


注意:假如數組長度為1的話,array.reduce(add)并不會調用add(),而是直接返回該元素值。測試:

function add(total, num) {console.log('total'+ total)console.log('num' + num)return total + num}var array = [1]var odd = array.reduce(add)console.log(odd)

以上代碼直接輸出1,add()方法中的兩個log都不會執行,即:沒有調用add()。

除了求和,reduce()還可以用于將數組元素連接成字符串。

function connect(string, item) {return string + ' ' + item}var array = ['I', 'am', 'a', 'developer', 'from', 'guangzhou']var sentence = array.reduce(connect)console.log(sentence)

結果:


(5)reduceRight()

此方法與reduce()類似,區別在于執行順序相反,reduce()為從左到右,此方法為從右到左。可以對以上代碼修改一下作為測試:

function connect(string, item) {return string + ' ' + item}var array = ['I', 'am', 'a', 'developer', 'from', 'guangzhou']var sentence = array.reduceRight(connect)console.log(sentence)

結果:


2、生成新數組的迭代器方法

有兩個迭代器方法可以產生新數組,map()與filter()。

2.1 map()

map()與forEach()有點像,都是每個數組元素應用某個函數,區別在于map()返回一個新的數組,該數組的元素是對原數組應用某個函數后的結果。對forEach()中的例子做一下修改:

function square(num) {return num * num}var nums = [1, 2, 3, 4, 5]var newArr = nums.map(square)console.log(newArr)

對字符數組也可以使用map(),原理跟數字的一樣的,假如有一個數組['54321', '23456', '01234'],如何截出520?

這個需求就可以使用map()輕松實現:

function connect(str) {return str[0]}var array = ['54321', '23456', '01234']var newArr = array.map(connect)console.log('哈哈哈: ' + newArr.join(''))

運行結果:


2.2 filter()

filter()與every()類似,傳入一個返回值為boolean類型的函數。不同的是,對數組中的所有元素使用傳入的方法,結果均為true時,該方法并不返回true,而是返回一個新數組,該數組包含原數組中應用該函數后結果為true的元素。舉個例子:

function isOdd(num) {return num % 2 !== 0}function isEven(num) {return num % 2 == 0}var nums = [1, 2, 3, 4, 5]var oddArr = nums.filter(isOdd)var evenArr = nums.filter(isEven)console.log('oddArr: ' + oddArr)console.log('evenArr: ' + evenArr)

運行結果:


2.3 filter()的應用例子。

(1)求及格的分數集,并對及格的所有分數進行求均值。

function pass(score) {return score >= 60}var grades = [11, 33, 55, 66, 77, 57, 90, 59, 100]var passArr = grades.filter(pass)// 及格的所有分數console.log(passArr)// 及格分數的平均值var sum = 0, arrLength = passArr.length;for (var i = 0; i < arrLength; i++) {sum += passArr[i]}console.log(parseFloat(sum / arrLength))

結果:


(2)過濾掉無"love"的元素。

function pass(word) {return word.indexOf('love') !== -1}var array = ['loveFamily', 'loveFriends', 'loveLearning', '哈哈哈啊哈哈']var love = array.filter(pass)console.log(love)

運行結果:


JavaScript數據結構與算法——數組詳解(中)完結~

剩余內容(二維數組與多維數組)將在下篇總結。

以上總結如存在不正確的地方,歡迎指出O(∩_∩)O~~~

周末愉快!!

總結

以上是生活随笔為你收集整理的JavaScript数组结构与算法——数组详解(中)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。