JavaScript之數組經常使用方法以及返回值

1.轉換方法 toString() valueOf() join()

  • toString()方法會返回由數組中每一個值的字符串形式拼接而成的一個以逗號分隔的字符串。
  • valueOf()返回的仍是數組
  • join()傳遞參數以自定義分隔符
let arr = ["a", "b", 1, 3, 6]
console.log(arr.toString())  // a,b,1,3,6
console.log(arr.valueOf())   // ["a", "b", 1, 3, 6]
console.log(arr.join(","))   // a,b,1,3,6
console.log(arr.join("/"))   // a/b/1/3/6
複製代碼

2.棧方法(棧是一種 LIFO(Last-In-First-Out,後進先出)的數據結構) push()和 pop()

  • push()方法能夠接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改後數組的長度。
  • pop()方法則從數組末尾移除最後一項,減小數組的 length 值,而後返回移除的項。
let colors = ["red", "green", "blue"]
let count = colors.push("black")
console.log(count)  // 4
let item = colors.pop()
console.log(item)  // black
複製代碼

3.隊列方法(先進先出) shift() unshift() 和 push() 方法能夠像使用隊列同樣使用數組

  • push()方法能夠接收任意數量的參數,把它們逐個添加到數組末尾,並返回修改後數組的長度。
  • unshift()它能在數組前端添加任意個項並返回新數組的長度
  • shift()它可以移除數組中的第一個項並返回該項,同時將數組長度減 1。
let colors = ["red", "green", "blue"]
let count = colors.push("black")
console.log(count);   // 4

let item = colors.shift()
console.log(item)    // red
console.log(colors)  //["green", "blue", "black"]


let count1 = colors.unshift("yellow");
console.log(count1)     // 4
console.log(colors)    // ["yellow", "green", "blue", "black"]
複製代碼

4.重排序方法 reverse() 和 sort()

  • reverse()方法會反轉數組項的順序
  • sort()方法(在默認狀況下)按升序排列數組項,sort()方法會調用每一個數組項的 toString()轉型方法,而後比較獲得的字符串,以肯定如何排序。即便數組中的每一項都是數值,sort()方法比較的也是字符串
// 反轉
let values = [0, 1, 5, 10, 15]
values.reverse()
console.log(values)  /// [15, 10, 5, 1, 0]


let values = [0, 1, 5, 10, 15]
values.sort()
console.log(values) // [0, 1, 10, 15, 5]

//升序
values.sort((a, b) => a - b)
console.log(values) // [0, 1, 5, 10, 15]

//降序
values.sort((a, b) => b - a)
console.log(values) // [15, 10, 5, 1, 0]
複製代碼

5.操做方法 concat() slice() splice()

  • concat() 建立當前數組一個副本,而後將接收到的參數添加到這個副本的末尾,最後返回新構建的數組。
  • slice() 它可以基於當前數組中的一或多個項建立一個新數組。slice()方法能夠接受一或兩個參數,即要返回項的起始和結束位置。
// concat()
let colors = ["red", "green", "blue"]
let colors2 = colors.concat(["black", "brown"])
console.log(colors)     // 原數組不變 ["red", "green", "blue"]
console.log(colors2)    // ["red", "green", "blue", "black", "brown"]

//slice()
let colors = ["red", "green", "blue", "yellow", "purple"];
let colors3 = colors.slice(1)
let colors4 = colors.slice(1, 4)
console.log(colors3) //["green", "blue", "yellow", "purple"]
console.log(colors4) //["green", "blue", "yellow"]

// 注意:若是 slice()方法的參數中有一個負數,則用數組長度加上該數來肯定相應的位
// 置。例如,在一個包含 5 項的數組上調用 slice(-2,-1)與調用 slice(3,4)獲得的
// 結果相同。若是結束位置小於起始位置,則返回空數組
複製代碼
  • splice() 方法始終都會返回一個數組,該數組中包含從原始數組中刪除的項(若是沒有刪除任何項,則返回一個空數組)前端

    • 刪除:能夠刪除任意數量的項,只需指定2個參數:要刪除的第一項的位置和要刪除的項數。例如,splice(0,2)會刪除數組中的前兩項。
    • 插入:能夠向指定位置插入任意數量的項,只需提供3個參數:起始位置、0(要刪除的項數)和要插入的項。若是要插入多個項,能夠再傳入第4、第五,以致任意多個項。例如,splice(2,0,"red","green")會從當前數組的位置 2 開始插入字符串"red"和"green"。
    • 替換:能夠向指定位置插入任意數量的項,且同時刪除任意數量的項,只需指定3個參數:起始位置、要刪除的項數和要插入的任意數量的項。插入的項數沒必要與刪除的項數相等。例如,splice (2,1,"red","green")會刪除當前數組位置 2 的項,而後再從位置 2 開始插入字符串"red"和"green"。
let colors = ["red", "green", "blue"]
let removed = colors.splice(0, 1) // 刪除第一項
console.log(colors) //["green", "blue"]
console.log(removed) //["red"] 返回刪除的項

let remo = colors.splice(1, 0, "yellow", "orange") // 從位置 1 開始插入兩項
console.log(colors)  // ["green", "yellow", "orange", "blue"]
console.log(remo) // [] 返回刪除的項沒刪除因此爲空
複製代碼

6.位置方法 indexOf() 和 lastIndexOf()

  • 這兩個方法都接收兩個參數:要查找的項和(可選的)表示查找起點位置的索引。這兩個方法都返回要查找的項在數組中的位置,
  • indexOf()方法從數組的開頭(位置 0)開始向後查找
  • lastIndexOf()方法則從數組的末尾開始向前查找。
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]
console.log(numbers.indexOf(4))  //3
console.log(numbers.lastIndexOf(4)) //5
複製代碼

7.迭代方法

  • every():對數組中的每一項運行給定函數,若是該函數對每一項都返回 true,則返回 true
  • filter():對數組中的每一項運行給定函數,返回該函數會返回 true 的項組成的數組。
  • forEach():對數組中的每一項運行給定函數。這個方法沒有返回值
  • map():對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組。
  • some():對數組中的每一項運行給定函數,若是該函數對任一項返回 true,則返回 true。
let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1]

let everyNum = numbers.every(function(item, index) {
  return item > 0
})
console.log(everyNum)  //true

let someNum = numbers.some(function(item, index) {
  return item > 3
})
console.log(someNum) //true

let filterNum = numbers.filter(function(item, index) {
  return item > 1
})
console.log(filterNum) // [2, 3, 4, 5, 4, 3, 2]

let mapNum = numbers.map(function(item, index) {
  return item * 2
});
console.log(mapNum) // [2, 4, 6, 8, 10, 8, 6, 4, 2]

//forEach和for同樣就是單純的循環數組
numbers.forEach(function(item, index, array) {
  //執行某些操做
})
複製代碼

8.歸併方法 reduce()和 reduceRight()。這兩個方法都會迭代數組的全部項,而後構建一個最終返回的值

  • reduce() 方法從數組的第一項開始,逐個遍歷到最後。
  • reduceRight() 則從數組的最後一項開始,向前遍歷到第一項。
  • 這兩個函數返回的任何值都會做爲第一個參數自動傳給下一項。
let values = [1, 2, 3, 4, 5]
let sum = values.reduce(function(prev, cur, index, array) {
  return prev + cur
})
let sum1 = values.reduce(function(prev, cur, index, array) {
  return prev * cur
})
let sum2 = values.reduceRight(function(prev, cur, index, array) {
  return prev + cur
})
let sum3 = values.reduceRight(function(prev, cur, index, array) {
  return prev * cur
})

console.log(sum) // 15        1+2+3+4+5 = 15
console.log(sum1) // 120      1*2*3*4*5 = 120
console.log(sum2) // 15       5+4+3+2+1 = 15
console.log(sum3) // 120      5*4*3*2*1 = 120    
複製代碼

參考:高級程序設計三數組

相關文章
相關標籤/搜索