JavaScript基礎知識-(數組)

1,數組是值的有序集合。每個值叫作一個元素,每一個元素在數組中有一個位置,稱爲索引。JavaScript的數組是無類型的,數組元素能夠是任意類型。

  數組的建立方法:
  (1)直接量:數組

var a = [1,2,3,4,5,]; // 注意:索引從0開始,最後一個是逗號可選的
複製代碼

  (2)調用構造方法bash

var arr = new Array(10) 
var arry = new Array(1,2,3,4,5)
複製代碼

2,經常使用的數組方法

(1)join() :將數組的全部元素都轉換爲字符串並鏈接在一塊兒,返回生成的字符串,能夠指定一個可選的字符串鏈接數組的每一個元素,若是沒有指定,默認使用逗號函數

var a = [1,2,3]
    a.join()  // => "1,2,3"
    a.join(" ") // => "1 2 3"
    // Array.join()方法是String.split()的逆向操做,split()是把字符串分割成若干塊建立一個數組
複製代碼

(2)reverse() :將數組中的元素顛倒順序,返回逆序的數組
(3)sort() :將數組中的元素排序並返回排序後的數組,不帶參數的調用sort()時,數組元素是以字母表順序排序的。ui

var a = [33,4,111,222]
    a.sort() // => 111,222,33,4
    a.sort(function(a,b){
        return a-b;
    })
    a.sort(function(a,b){
        return b-a;
    })
複製代碼

(4)concat() : 建立並返回一個新數組spa

var a = [1,2,3]
    a.concat([4,5])  // => [1,2,3,4,5]
    a.concat(4,5)  // => [1,2,3,4,5]
複製代碼

(5)slice() : 返回指定數組的一個片斷或者子數組,它的兩個參數分別指定了片斷的開始位置和結束位置,不會修改原數組。切記:包含第一個參數指定的元素,不包含最後一個參數指定的位置。 若是出現負數,-1表示最後一個元素位置code

var 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]
複製代碼

(6)splice() :在數組中插入或者刪除元素的通用方法。會修改原數組。它的兩個參數:第一個參數指定了插入或者刪除的起始位置,第二個參數指定了從數組中刪除的元素個數,若是省略第二個參數,表示從起點開始到數組的結尾的全部元素都刪除。返回一個由刪除元素組成的數組,若是沒有刪除元素就返回一個空數組。而且原數組也發生了改變對象

var a= [1,2,3,4,5]
    a.splice(2) // => 返回[3,4,5]  原數組:a=[1,2]
    a.splice(1,1) // => 返回[2] 原數組: a=[1]
複製代碼

splice()的前兩個參數指定了須要刪除的數組元素。緊隨其後的任意多個參數指定了須要插入到數組中的元素,從第一個參數指定的位置開始插入排序

var a = [1,2,3,4,5]
    a.splice(2,0, 'a', 'b') // => 返回[]空數組 , 原數組:a = [1,2,'a','b',3,4,5]
複製代碼

(7)push()和pop() : push():在數組尾部添加一個或者多個元素,並返回數組長度
           pop():刪除數組最後一個元素,返回它刪除的值索引

var stack = []
    stack.push(1,2,3) // 返回3長度    stack = [1,2,3]
    stack.pop();      // 返回3元素值    stack = [1,2]     
複製代碼

(8)unshift()和shift()
      unshift()在數組的頭部添加一個或者多個元素,並返回數組長度          shift() 刪除數組第一個元素,並返回刪除的值ip

var a = []
    a.unshift(111) // 返回1   a = [222]
    a.unshift(333,555) // 返回3  a = [333,555,111]
    a.shift()         // 返回333  a = [555,111]
複製代碼

3,ES5中新增的數組方法

(1)forEach() :從頭到尾遍歷數組,爲每一個元素調用指定的函數。該方法的第一個參數就是被用的函數,而且向該函數傳遞了三個參數:分別是(每一個數組元素,元素的索引,數組自己)。有兩種寫法:

var data = [1,2,3,4,5]
data.forEach(function(val){
    console.log(val)
})
data.forEach(function(val,i,data){
    a[i] = val + i  // 每一個元素自增1
})
複製代碼

(2)map() : 將調用的數組的每個元素傳遞給指定的函數,計算,並返回一個新數組,

var a = [1,2,3,4,5]
    b = a.map(function(val){
        return val * val
    })
    // 注意:map()返回的是新數組,它不修改調用的數組
複製代碼

(3)filter() : 返回的數組元素是調用數組的一個子集,傳遞的函數是過濾和判斷的條件,返回true和false。 若是函數返回值爲true,那麼傳遞給函數的元素就會被放到返回的數組中,若是函數返回值爲false,就過濾到該元素

var a = [1,2,3,4,5]
    b = a.filter(function(val){
        return x < 3
    })  // b = [1,2]
// 對稀疏數組,壓縮空缺並刪除undefined和null元素
a = a.filter(function(val){
    return x !== undefined && x !=null
})
複製代碼

(3)every()和some()
  every(): 函數中全部元素判斷條件都爲true,才返回true
  some(): 函數中全部元素判斷條件只要有一個爲true,就返回true

var a = [1,2,3,4,5]
    a.every(function(val){
        return val < 10     // 返回true
    })
    a.every(function(val){
        return val % 2 === 0     // 返回false ,存在不符合的元素
    })
    a.some(function(val){
        return val % 2 ===0 ;  // 返回 true, 有一個元素知足就能夠了
    })
    a.some(isNaN)   // 返回false, 遍歷數組,不存在這樣非數值的元素
複製代碼

(4)reduce()和reduceRight() : 使用指定的函數將數組元素進行組合計算,生成單個值,並返回。reduce()須要兩個參數。第一個參數是執行的函數,對元素繼續計算組合,並返回簡化以後的值。第二個參數可選,是一個傳遞給函數的初始值

var a = [1,2,3,4,5]
var sum = a.reduce(function(x,y){
    return x + y;
},0)
// 0是第一個傳遞個函數的初始值,因此第一次 0 + 1 = 1, 返回值1
// 第二次計算: 返回值加上第二個元素: 1 + 2 = 3 返回值3,依次計算
var product = a.reduce(function(x,y){
    return x * y;
},1)
var max = a.reduce(function(x,y){
   return x > y ? x : y;
})
// 若是reduce()沒有第二個參數,它就使用數組的第一個元素做爲初始值
複製代碼

  reduceRight()和reduce()工做原理同樣,區別是:reduceRight()按照數組索引從高到底,從右到左處理數組,並進行計算

// 把p中的可枚舉屬性複製到oz中,並返回o
function extend(o,p) {
    for (prop in p) {
        o[prop] = p[prop];
    }
    return o;
}
// 返回一個新對象,同時擁有o對象和p對象屬性
function union(o,p) {
    return extend(extend({},o),p)
}
//對象的並集
var object = [{x:1},{y:2},{z:3}]
var merged = object.reduct(union) // 返回 => {x;1,y:2,z:3}
// 若是簡化的時候,有相同屬性,union函數是使用第一個參數的屬性
var objects = [{x:1,a:1},{y:2,a:2},{z:3,a:3}];
var leftUnion = objects.reduct(union) // =>{x:1,y:2,z:3,a:1}
var rightUnion = objects.reductRight(union) // =>{x:1,y:2,z:3,a:3}
複製代碼

(5)indexOf和lastIndexOf : 搜索整個數組中具備給定值的元素,並返回找到的第一個元素的索引或者若是沒有找到就返回-1。indexOf():從頭到尾搜索 lastIndexOf():從後往前搜索

var a = [0,1,2,3,3,2,1,0]
    a.indexOf(1) // 返回索引位置:1
    a.lastIndexOf(1) // 返回索引位置:6
    a.indexOf(9)    //返回 -1
// 在數組中查找全部出現的b,並返回一個包含匹配索引的數組
var c = [0,1,2,3,3,2,1,0,6,2,4]
	function findall(a,b) {
		var results = [];
		var len = a.length;
		var pos = 0;
		while(pos < len){
			pos = a.indexOf(b,pos) // 從索引0的地方查找元素
			if(pos === -1) break;
			results.push(pos)
			pos = pos + 1
		}
		console.log(results) // => 輸出 [8]
		return results;
	}
	findall(c,6)  
複製代碼

(6)數組類型檢測:ES5新增方法 isArray()

Array.isArray([]) // =>true
Array.isArray({}) // =>false
複製代碼
相關文章
相關標籤/搜索