摘要:返回值自寫一下函數這就是一個簡單的自寫的一個函數,代表操作的數組,代表用來操作數組的函數,傳入數組和函數。返回值返回排序后的數組。分隔符指定一個字符串來分隔數組的每個元素。生成新數組元素的函數,使用三個參數。
什么是數組
在阮一峰的《JavaScript 標準參考教程(alpha)》中的解釋是:
數組(array)是按次序排列的一組值。每個值的位置都有編號(從0開始),整個數組用方括號表示。
JS的本質理解是:
數組(array)就是原型鏈中有 Array.prototype 的對象
var a = Array(3) // {length:3} var a = new Array(3) // {length:3}
如果輸入只有一個數字,那么創建的數組就是length為3,并且三個數的值都為undefinde。new加不加效果都一樣
var b = Array(3,3) // [3,3] var b = new Array(3,3) // [3,3]
如果輸入的值超過一個,那么創建的就是一個value等于輸入值的數組。new加不加效果都一樣
var a = [,,,]//{length:3},值為undefined var a = [3,3]//[3,3]
創建數組也可以像這樣直接創建,只有逗號的話代表的就是有下標但是值為undefined的數。
偽數組有 0,1,2,3,4,5...n,length 這些 key 的對象
原型鏈中沒有 Array.prototype
這樣的對象就是偽數組
目前學習到的偽數組例如:
arguments 對象
document.querySelectAll("div") 返回的對象
數組的API Array.prototype.forEach()forEach()接收一個函數,并且forEach()方法對數組的每個元素執行一次提供的函數。
array.forEach(callback(currentValue, index, array){ //do something }) array.forEach(callback())
callback:為數組中每個元素執行的函數,該函數接收三個參數
currentValue(當前值):數組中正在處理的當前元素。
index(索引):數組中正在處理的當前元素的索引。
array:forEach()方法正在操作的數組。
返回值:undefined
自寫一下forEach函數
function forEach(array, x){ for(let i = 0;i < array.length; i++){ x(array[i],i) } }
這就是一個簡單的forEach()自寫的一個函數,array代表操作的數組,x代表用來操作數組的函數,傳入數組和函數。
var obj = [] obj.forEach = function(x){ for(let i = 0; i < this.length; i++){ x(this[i], i) } }
this就是指代obj這個數組
Array.prototype.sort()sort() 方法用就地( in-place )的算法對數組的元素進行排序,并返回數組。 sort 排序不一定是穩定的。默認排序順序是根據字符串Unicode碼點。
arr.sort() arr.sort(compareFunction)
compareFunction:可選。用來指定按某種順序進行排列的函數。如果省略,元素按照轉換為的字符串的各個字符的Unicode位點進行排序。
返回值:返回排序后的數組。原數組已經被排序后的數組代替。
如果沒有指明 compareFunction ,那么元素會按照轉換為的字符串的諸個字符的Unicode位點進行排序。例如 "Banana" 會被排列到 "cherry" 之前。當數字按由小到大排序時,9 出現在 80 之前,但因為(沒有指明 compareFunction),比較的數字會先被轉換為字符串,所以在Unicode順序上 "80" 要比 "9" 要靠前。
如果是數字想升序排列,sort()中輸入:
function compareNumbers(a, b) { return a - b; }//也可以(a,b) => a-b
如果是數字想倒序排列,sort()中輸入:
function compareNumbers(a, b) { return b - a; }//也可以(a,b) => b-a
對象可以按照某個屬性排列:
var students = ["小明","小紅","小花"] var scores = { 小明: 59, 小紅: 99, 小花: 80 } students.sort(function(x, y){ return scores[y] - scores[x] })
另外sort()是一個比較特殊的API,因為它改變了自身數組,這是為了節省內存。
Array.prototype.join()join() 方法將一個數組(或一個類數組對象)的所有元素連接成一個字符串并返回這個字符串。
str = arr.join(separator) // 分隔符
separator:
指定一個字符串來分隔數組的每個元素。
如果需要(separator),將分隔符轉換為字符串。
如果省略(),數組元素用逗號分隔。默認為 ","。
如果separator是空字符串(""),則所有元素之間都沒有任何字符。
返回值:一個所有數組元素連接的字符串。如果 arr.length 為0,則返回空字符串
var a = ["a","s","d"] a.join()//"a,s,d" a.join("")//"asd" a.join("f")//"afsfd"
所有的數組元素被轉換成字符串,再用一個分隔符將這些字符串連接起來。如果元素是undefined 或者null, 則會轉化成空字符串。
Array.prototype.concat()concat() 方法用于合并兩個或多個數組。此方法不會更改現有數組,而是返回一個新數組。
var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
valueN:將數組和/或值連接成新數組。
返回值:新的 Array 實例。
var alpha = ["a", "b", "c"]; var numeric = [1, 2, 3]; alpha.concat(numeric);//[1, 2, 3, 4, 5, 6, 7, 8, 9]
將兩個數組連接起來生成一個新的數組。
var alpha = ["a", "b", "c"]; var alphaNumeric = alpha.concat(1, [2, 3]); //["a", "b", "c", 1, 2, 3]
可以直接將值連接到數組,生成一個新的數組。
var a = [1,2,3] var b = a.concat()//[1, 2, 3] b === a//false
concat()可以創建一個相同值的數組,但是是新創建的一個對象。
Array.prototype.map()map() 方法創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果。
map()和forEach()很像,但是forEach()返回undefined,而map()返回一個對數組內每個數處理的數組。
let new_array = arr.map(function callback(value, key, array) { // Return element for new_array })
callback:生成新數組元素的函數,使用三個參數。
value:callback 的第一個參數,數組中正在處理的當前元素。
key:callback 的第二個參數,數組中正在處理的當前元素的下標。
array:callback 的第三個參數,map 方法被調用的數組。
返回值:一個新數組,每個元素都是回調函數的結果。
var a = [1,2,3] a.map(function(value,key){ return value *value })//[1,4,9]
map()可以對數組的每個值進行操作,和forEach是基本一樣的,但是,map()返回一個新的數組,而forEach返回的是undefined。
Array.prototype.filter()filter() 方法創建一個新數組, 其包含通過所提供函數實現的測試的所有元素。
array.filter(function(value, key, array){})
value:當前在數組中處理的元素
key:正在處理元素在數組中的下標(索引)
array:調用了filter篩選器的數組
返回值:返回的是一個布爾值,來判斷篩選條件
var a = [1,2,3,4,5,6,7,8,9,10] a.filter(function(value){ return value > 5 })//[6, 7, 8, 9, 10]
進行篩選,返回一個篩選之后的數組,不改變原數組
Array.prototype.reduce()reduce() 方法對累加器和數組中的每個元素(從左到右)應用一個函數,將其減少為單個值。
a.reduce(callback(prev, value),initial)
callback:執行數組中每個值的函數
prev:累加器累加回調的返回值; 它是上一次調用回調時返回的累積值
value:數組中正在處理的元素
initial:累加時的初始值
var a = [1,2,3,4,5,6,7,8,9,10] a.reduce(function(sum,n){ return sum + n },0)//55
對數組的內容累計處理,reduce可以變換實現map()和filter()
var a = [1,2,3] a.reduce(function(arr,n){ arr.push(n*2) return arr },[])//[2, 4, 6]
這就是reduce()實現map()的過程
var a = [1,2,3,4,5,6,7,8,9,10] a.reduce(function(arr,n){ if(n%2===0){ arr.push(n) } return arr },[])//[2, 4, 6, 8, 10]
這是reduce()實現filter()的過程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96084.html
摘要:數組語法功能遍歷數組,返回回調返回值組成的新數組,不改變原數組,不會對空數組進行檢測語法功能無法,可以用中來停止,不改變原數組語法功能過濾,返回過濾后的數組,不改變原數組,不會對空數組進行檢測語法功能有一項返回,則整體為,不改變原數組語法 數組 (array) ES5 * map 語法:[].map(function(item, index, array) {return xxx})功...
摘要:不能通過判斷,它是通過比較的。和返回布爾值用于檢測數組中的元素是否有滿足指定條件的用于檢測數組中所有元素是否都符合指定條件。第二個可選參數是累加器的初始值。累加器,即函數上一次調用的返回值。 unshift、push、shift、pop 這4個方法都會改變原數組 unshift() 從前面添加元素,push() 從后面追加元素,返回數組長度 shift() 刪除第0個元素,pop()...
摘要:,也不會出來接受兩個參數,回調函數和回調函數的第一個參數可選回調函數接受四個參數回調函數的返回值處理結果或者的第二個參數正在處理的元素正在處理元素的索引調用的數組。 數組常用 api 介紹 split():拆分字符串變成數組(對字符串操作)join() :合并數組變成字符串(對數組操作)concat():連接兩數組splice(begin,deleteCount,insert):拼接s...
摘要:語法數組刪除數組的最后一項語法數組在數組的最末添加一項語法數組刪除數組的首項語法數組在數組的首部添加一項案例分析 1:數組的指針操作: 語法:current(數組) 當前指針指向的單元值(默認是第零個)語法 next(數組) 當前指針往下移動一幀語法 prev(數組) 當前指針往前移動一個指針語法 end(array) 將當前指針移動到最后一項語法 ...
閱讀 2715·2021-11-22 13:52
閱讀 1184·2021-10-14 09:43
閱讀 3637·2019-08-30 15:56
閱讀 2952·2019-08-30 13:22
閱讀 3269·2019-08-30 13:10
閱讀 1563·2019-08-26 13:45
閱讀 1102·2019-08-26 11:47
閱讀 2788·2019-08-23 18:13