js数组方法总结
目錄
- 改變原數組的方法:push、unshift、pop、shift、sort、splice、reverse、
- push:向數組尾部添加一個數值,返回值是數組的長度
- unshift:向頭部添加一個或多個數值,返回數組的長度
- pop:刪除數組尾部元素,并且將刪除的元素返回,不接受指定參數
- shift:刪除數組的第一個元素并將其返回,然后把所有隨后的元素下移一個位置來填補數組頭部的空缺
- sort:將數組中的元素排序并返回排序后的數組,當不帶參數調用sort()時,數組元素以字母表順序排列
- splice:在數組中插和或刪除元素。返回一個由刪除元素數組組成的數組,或者如果沒有刪除元素就返回一個空數組
- reverse:將數組中的元素顛倒順序,返回逆序的數組。它不通過重新排列的元素創建新的數組,而是在原先的數組中重新排列他們
- 不改變原數組的方法:concat、join、slice、reduce、forEach、map、filter、findIndex
- concat 創建并返回一個新數組
- join 將數組中所有元素都轉化為字符串并連接在一起,返回最后生成的字符串
- slice 返回指定數組的一個片段或子數組
- reduce和reduceRight 將數組元素進行組合,生成單個值。也可以稱之為“注入”和“折疊”
- map:將調用的數組的每個元素傳遞給指定的函數,并返回一個數組,它包含該函數的返回值
- forEach :從頭至尾遍歷數組,為每個元素調用指定的函數
- 中斷forEach循環
- filter:返回的數組元素是調用的數組的一個子集。傳遞的函數是用來邏輯判定的:該函數返回true或false。調用判定函數就像調用forEach和map一樣。如果返回值為true或能轉化為true的值,那么傳遞給判定函數的元素就是這個子集的成員,它將被添加到一個作為返回值的數組中
- find:找到第一個滿足測試函數的元素并返回那個元素的值,如果找不到則返回undefined
- findIndex:返回傳入一個測試條件(函數)符合條件的數組第一個元素位置
- 其他方法:some、every、indexOf、lastIndexOf
- some和every :是數組的邏輯判定:它們對數組元素應用指定的函數進行判定,返回true或false
- indexOf和lastIndexOf :indexOf和lastIndexOf搜索整個數組中具有給定值的元素,返回找到的第一個元素的索引或者如果沒有找到就返回-1.indexOf從頭至尾搜索,而lastIndexOf則反向搜索。
- 數組遍歷時刪除某項元素
- filter
改變原數組的方法:push、unshift、pop、shift、sort、splice、reverse、
push:向數組尾部添加一個數值,返回值是數組的長度
let arr = [1, 3, 5, 6, 7]console.log(arr.push(2)) // 6console.log(arr) // [1, 3, 5, 6, 7, 2]// 向尾部添加多個數值 arr.push(1, 2, 3) // [1, 3, 5, 6, 7, 1, 2, 3] // 若是寫成數組的形式,會把整個數組當成一個元素添加進數組的尾部; arr.push([4,5,6,7]) // [1, 3, 5, 6, 7, [4,5,6,7]]unshift:向頭部添加一個或多個數值,返回數組的長度
let arr = [1, 3, 5, 6, 7]console.log(arr.unshift(2)) // 6console.log(arr) // [2, 1, 3, 5, 6, 7]//若是寫成數組的形式,會把整個數組當成一個元素添加進數組的頭部;arr.unshift([2,2,2]) // [[2, 2, 2],1, 3, 5, 6, 7]//向數組頭部添加多個值arr.unshift(3,4,5) // [3, 4, 5, 1, 3, 5, 6, 7]pop:刪除數組尾部元素,并且將刪除的元素返回,不接受指定參數
let arr = [1, 3, 5, 6, 7] console.log(arr.pop()) // 7 console.log(arr) // [1, 3, 5, 6] // 不接受指定參數,仍舊刪除數組尾部的一個元素 arr.pop(3) // 6 console.log(arr) // [1, 3, 5]shift:刪除數組的第一個元素并將其返回,然后把所有隨后的元素下移一個位置來填補數組頭部的空缺
let a = [1, 2, 3] console.log(a.shift()) // 1 (被刪除的數組元素) console.log(a) // [2, 3]sort:將數組中的元素排序并返回排序后的數組,當不帶參數調用sort()時,數組元素以字母表順序排列
let a = new Array("banana","cherry","apple"); a.sort(); // a: ['apple', 'banana', 'cherry'](一)為了按照其他方式而非字母順序進行數組排序,必須給sort方法傳遞一個比較函數,該函數決定了它的兩個參數在排好序的數組中的先后順序。假設第一個參數應該在前,比較函數應該返回一個小于0的數值。反之,假設第一個參數應該在后,函數應該返回一個大于0的數值。并且,假設兩個值相等(也就是說,它們的順序無關緊要),函數應該返回0
let a = [33,4,1111,222]; a.sort(); //字母表順序:1111,222,33,4 a.sort(function(a,b){ //數值順序:4,33,222,1111return a-b; //根據順序,返回負數、0、正數 }) a.sort(function(a,b){return b-a}); //數值大小相反的順序 結合一下: function sortArr(isOrder = true) { // 默認為升序return function(a, b) {if (isOrder) {return a - b} else{return b - a}} } a.sort(sortArr()) // a:[4, 33, 222, 1111] a.sort(sortArr(false)) // a:[1111, 222, 33, 4](二)數組對象排序
let a = [{ id: 33, name: '夜雨聲煩' },{ id: 4, name: '石不轉' },{ id: 1111, name: '冰雨' },{ id: 222, name: '沐雨橙風' }, ]; function dateSort(property, isOrder = true) { //默認代表升序,false為降序return function(a, b) {let value1 = a[property]let value2 = b[property]if (isOrder) {return value1 - value2} else {return value2 - value1}} } a.sort(dateSort('id')) // a如下: 0: {id: 4, name: '石不轉'} 1: {id: 33, name: '夜雨聲煩'} 2: {id: 222, name: '沐雨橙風'} 3: {id: 1111, name: '冰雨'}a.sort(dateSort('id', false)) // a如下: 0: {id: 1111, name: '冰雨'} 1: {id: 222, name: '沐雨橙風'} 2: {id: 33, name: '夜雨聲煩'} 3: {id: 4, name: '石不轉'}(三)對一個字符串數組執行不區分大小寫的字母表排序,比較函數首先將參數都轉化為小寫字符串(使用toLowerCase()方法),再開始比較
let a = ['ant','Bug','cat','Dog']; a.sort(); // 區分大小寫的排序:['Bug','Dog','ant','cat'] a.sort(function(s,t){ //不區分大小寫的排序var a = s.toLowerCase();var b = s.toLowerCase();if(a < b) return -1;if(a > b) return 1;return 0; }) // => ['ant','Bug','cat','Dog']splice:在數組中插和或刪除元素。返回一個由刪除元素數組組成的數組,或者如果沒有刪除元素就返回一個空數組
第一個參數指定了插入和(或)刪除的起始位置。
第二個參數指定了應該從數組中刪除的元素的個數。
如果省略第二個參數,從起始點開始到數組結尾的所有元素都將被刪除。
緊隨其后的任意個數的參數指定了需要插入到數組中的元素,從第一個參數指定的位置開始插入
將數組的某一項移動到首位
var layers = [3,4,2,5]; layers.unshift(layers.splice(2,1)[0]) console.log(layers); // => [2, 3, 4, 5]reverse:將數組中的元素顛倒順序,返回逆序的數組。它不通過重新排列的元素創建新的數組,而是在原先的數組中重新排列他們
let a = [1,2,3]; a.reverse().join() // => "3,2,1",并且現在的a是[3,2,1]不改變原數組的方法:concat、join、slice、reduce、forEach、map、filter、findIndex
concat 創建并返回一個新數組
元素包括調用concat()的原始數組的元素和concat()的每個參數。如果這些參數中的任何一個自身是數組,則連接的是數組的元素,而非數組本身。
let a = [1,2,3]; a.concat(4,5) ; // 返回[1,2,3,4,5] a.concat([4,5]); //返回[1,2,3,4,5] a.concat([4,5],[6,7]) //返回[1,2,3,4,5,6,7] a.concat(4,[5,[6,7]]) //返回[1,2,3,4,5,[6,7]]join 將數組中所有元素都轉化為字符串并連接在一起,返回最后生成的字符串
可以指定一個可選的字符串在生成的字符串中來分隔數組的各個元素。如果不指定分隔符,默認使用逗號
let a = [1,2,3]; a.join(); // => "1,2,3" a.join(" "); // => "1 2 3" a.join("") // => "123"; var b = new Array(10); //長度為10的空數組 b.join('-') // => '---------':9個連字號組成的字符串slice 返回指定數組的一個片段或子數組
兩個參數分別指定了片段的開始和結束的位置。返回的數組包含第一個參數指定的位置和所有到但不含第二個參數指定的位置之間的所有數組元素。如果只指定一個參數,返回的數組將包含從開始位置到數組結束的所有元素。如果參數中出現負數,它表示相對于數組中最后一個元素的位置
let a = [1,2,3,4,5]; a.slice(0,3); //返回[1,2,3] a.slice(3); //返回[4,5] a.slice(1,-1); //返回[2,3,4] a.slice(-3,-2); //返回[3](一)純js 分頁
<div id="div"></div> <button onclick="jump(1)">第一頁</button> <button onclick="jump(2)">第二頁</button> <button onclick="jump(3)">第二頁</button> <script>let div = document.getElementById('div')let currentList = [1, 2, 3, 4, 5, 6, 7, 8, 9, '夜雨聲煩', '石不轉', '輝月', '沐雨橙風']let pageNum = 1let pageSize = 5jump()function jump(num=1) {pageNum = numlet array = currentList.slice((pageNum - 1) * pageSize, pageNum * pageSize)const HTMLString = `${array.map(element => {return `<p>${element}</p>`}).join('')}`div.innerHTML = HTMLString} </script>reduce和reduceRight 將數組元素進行組合,生成單個值。也可以稱之為“注入”和“折疊”
需要兩個參數,第一個是執行化簡操作的函數,第二個(可選)的參數是一個傳遞給函數的初始值。
map:將調用的數組的每個元素傳遞給指定的函數,并返回一個數組,它包含該函數的返回值
forEach :從頭至尾遍歷數組,為每個元素調用指定的函數
中斷forEach循環
break、continue、return均無法中斷forEach循環,break和continue會報錯,return只是中斷當前項,并沒有斷掉循環
let arr = [1, 2, 3, 4]arr.forEach(item => {if (item === 3) returnconsole.log(item)})
javascript權威指南中代碼如下
filter:返回的數組元素是調用的數組的一個子集。傳遞的函數是用來邏輯判定的:該函數返回true或false。調用判定函數就像調用forEach和map一樣。如果返回值為true或能轉化為true的值,那么傳遞給判定函數的元素就是這個子集的成員,它將被添加到一個作為返回值的數組中
let a = [5,4,3,2,1]; smallvalue = a.filter(function(x) {return x<3;}); //[2,1] everyother = a.filter(function(x,i) {return i%2 == 0}); // [5,3,1]find:找到第一個滿足測試函數的元素并返回那個元素的值,如果找不到則返回undefined
[1, 5, 10, 15].find(function(value, index, arr) { // 參數:當前值、當前的位置、原數組return value > 9; }) // 10findIndex:返回傳入一個測試條件(函數)符合條件的數組第一個元素位置
為數組中的每個元素都調用一次函數執行:
其他方法:some、every、indexOf、lastIndexOf
some和every :是數組的邏輯判定:它們對數組元素應用指定的函數進行判定,返回true或false
indexOf和lastIndexOf :indexOf和lastIndexOf搜索整個數組中具有給定值的元素,返回找到的第一個元素的索引或者如果沒有找到就返回-1.indexOf從頭至尾搜索,而lastIndexOf則反向搜索。
數組遍歷時刪除某項元素
let currentList = [{ id: 1, name: '夜雨聲煩', role: '劍客' },{ id: 3, name: '石不轉', role: '牧師' },{ id: 4, name: '沐雨橙風', role: '槍炮師' },{ id: 2, name: '索克薩爾', role: '術士' },{ id: 5, name: '一葉知秋', role: '法師' },{ id: 7, name: '李茂貞', role: '岐王' },{ id: 9, name: '水云姬', role: '女帝' },{ id: 8, name: '候卿', role: '尸祖' },{ id: 6, name: '趙玉真', role: '道士' },{ id: 10, name: '李寒衣', role: '劍仙' },{ id: 13, name: '鏡玄', role: '劍客' },{ id: 12, name: '須靈犀', role: '牧師' },{ id: 11, name: '蓋聶', role: '劍士' }]filter
總結
- 上一篇: AUTOSAR架构软件结构简介
- 下一篇: 001之Persimmon UI Bui