數據結構與算法之數組結構

JS 的數組就是API的調用

一.其餘語言的數組的封裝(好比Java的ArrayList)

  • 爲何js的數組不須要封裝,而java的須要封裝呢? :由於java中的數組結構相對來講比較底層,而js當中對數組的操做封裝的很好
    • 常見的語言的數組不能存放不一樣的數據類型,所以全部在封裝時一般存放在數組中的時Object類型
    • 常見語言的數組容量不會自動改變(須要進行擴容操做)
    • 常見的語言的數組進行中間插入刪除操做性能比較低
  • 當其餘語言進行中間插入的時候,後面的數據必須先所有一個一個所有日後移動一個位置,空出一個位置後,才能插入數據
  • 當其餘語言進行刪除的時候,還必須把後面的元素所有往前移動一個位置,由於刪除了第一個元素,第一個是空的,經過索引0是取不到數據的,然後面的元素又不會動態的補上
  • 因此咱們爲何還要使用數組呢?
    • 經過下標值取數據的時候,效率很是高,可以直接定位的那個數據,進行修改,和查詢

二. 數組API的常見操做

定義一個數組 let numbers =[1,2,3,4,5,6]javascript

添加元素

//在數組的最後一個位置添加元素
numbers.push(11)  //1,2,3,4,5,6,11

//在數組的頭部位置添加一個元素
for (var i = numbers.length; i > 0; i--) {
    numbers[i] = numbers[i-1]
}
numbers[0] = -1
alert(numbers) // -1,1,2,3,4,5,6  (取到最後一個元素的後面一個位置,從後開始,將前面的一個賦值給後面一個,最後就空出頭部位置了)

刪除元素

// 刪除最後的元素
numbers.pop()  //1,2,3,4,5
//刪除頭部的元素
numbers.shift() //2,3,4,5,6

任意位置的刪除和修改

//刪除 指定位置的幾個元素  (幾個元素,不是第幾個)
numbers.splice(1, 2) //1,4,5,6

//修改 指定位置的幾個元素
numbers.splice(1, 2, "a", "b") //1,a,b,4,5,6  
這種操做會先刪除,在添加寫入的元素:先從索引1開始刪除兩個,在從刪除的地方加上a,b兩個元素
eg:
numbers.splice(1, 2, "a")  //1,a,4,5,6
numbers.splice(1, 3, "a") //1,a,5,6

常見的其餘數組方法

concats 鏈接兩個或者更多數組,並返回結果
every 對數組中的每一項運行給定函數,若是該函數對每一項都返回 true,則返回true, 不然返回false
filter 對數組中的每一項運行給定函數,返回該函數會返回 true的項組成的數組
forEach 對數組中的每一項運行給定函數。這個方法沒有返回值
join 將全部的數組元素鏈接成一個字符串
indexOf 返回第一個與給定參數相等的數組元素的索引,沒有找到則返回-1
lastIndexOf 返回在數組中搜索到的與給定參數相等的元素的索引裏最大的值
map 對數組中的每一項運行給定函數,返回每次函數調用的結果組成的數組
reverse 顛倒數組中元素的順序,原先第一個元素如今變成最後一個,一樣原先的最後一個元素變成了如今的第一個
slice 傳入索引值,將數組裏對應索引範圍內的元素做爲新數組返回
some 對數組中的每一項運行給定函數,若是任一項返回 true,則結果爲true, 而且迭代結束
sort 按照字母順序對數組排序,支持傳入指定排序方法的函數做爲參數
toString 將數組做爲字符串返回
valueOf 和 toString相似,將數組做爲字符串返回

數組的合併

// 數組的合併
var nums1 = [1, 2, 3]
var nums2 = [100, 200, 300]
var newNums = nums1.concat(nums2)
alert(newNums) // 1,2,3,100,200,300

迭代方法

every()方法
  • every()方法是將數組中每個元素傳入到一個函數中, 該函數返回true/false.
  • 若是函數中每個元素都返回true, 那麼結果爲true, 有一個爲false, 那麼結果爲false
  • every()練習 :
    • 判斷一組元素中是否 包含某一個字符
// 定義數組
var names = ["abc", "cb", "mba", "dna"]

// 判斷數組的元素是否都包含a字符
var flag = names.every(function (t) {
    return t.indexOf('a') != -1 //indexof方法等於-1爲沒找到,找到了返回第一個索引
})
alert(flag)  //false
some()方法
  • some()方法是將數組中每個元素傳入到一個函數中, 該函數返回true/false
  • 可是和every不一樣的是, 一旦有一次函數返回了true, 那麼迭代就會結束. 而且結果爲true
  • some()練習 :
    • 判斷一組元素中是否 包含某一個字符
// 定義數組
var names = ["abc", "cb", "mba", "dna"]

// 判斷數組中是否包含有a字符的字符
var flag = names.some(function (t) {
    alert(t)
    return t.indexOf("a") != -1
})
alert(flag)
forEach()方法
  • forEach()方法僅僅是一種快速迭代數組的方式而已
  • 該方法不須要返回值
  • forEach的練習
// 定義數組
var names = ["abc", "cb", "mba", "dna"]

// forEach的使用
names.forEach(function (t) {
    alert(t)
})  //彈出四次框 ,分別對應數組的每一項

另外三個filter,map,reduce方法在關於js的隨筆中有所闡述java

相關文章
相關標籤/搜索