數據結構與算法-數組(Array)

Javascript 中的數組是一種特殊的對象,用來表示偏移量的索引是該對象的屬性,索引多是整數。可是,這些數字索引在內部被轉換爲字符串類型,這是由於Javascript對象中的屬性名必須是字符串。數組在javascript中只是一種特殊的對象,因此效率上不如其它語言中的數組高。javascript

javascript中的數組,嚴格來講應該稱爲對象,是特殊的javascript對象,在內部被歸類未數組。因爲Array在javascript中被當作對象,所以它有許多屬性和方法能夠在編程時使用。java

一、建立數組

  1. var number = [];

// number.length = 0; 效率最高,推薦使用編程

  1. var number = [1, 2, 3, 4, 5];

// number.length = 5數組

  1. var number = new Array();

// number.length = 0編程語言

  1. var number = new Array(1, 2, 3, 4, 5);

// number.length = 5函數

  1. var number = new Array(10);

// number.length = 10ui

  1. var objects = [1, 'wqh', false, null];

// 數組中的元素沒必要是同一種數據類型,這一點和不少編程語言不一樣。spa

二、判斷數組-Array.isArray()

Array.isArray()判斷一個對象是不是數組。code

var number = 10;
var arr = [7, 8, 9];
Array.isArray(number); // false
Array.isArray(arr); // true
複製代碼

三、讀寫數組

使用[]操做符將數據賦值給數組cdn

var nums = []
for (var i = 0; i < 10; i++) {
    nums[i] = i;
}
複製代碼

使用[]操做符讀取數組中的元素

var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for (var i = 0; i < nums.length; i++) {
    console.log(nums[i])
}
複製代碼

四、字符串生成數組-split()

調用字符串對象的split()方法。

var paragraph = 'my name is wuQinHao'
var wordsArray = paragraph.split(' ')
console.log(wordsArray)
// ["my", "name", "is", "wuQinHao"]
複製代碼

五、淺複製與深複製

var nums = [1, 2, 3, 4, 5]
var copyNums = nums
console.log(copyNums) // [1, 2, 3, 4, 5]
nums[0] = 100
console.log(copyNums[0]) // 100
複製代碼

因而可知把一個數組賦值給另外一個數組時,只是爲被賦值的數組增長了一個新的引用,當改變原引用的數值時新引用也會隨之改變,這是淺複製

var nums = [1, 2, 3, 4, 5]
var copyNums = []
for (var i = 0; i < nums.length; i++) {
    copyNums[i] = nums[i]
}
console.log(copyNums) // [1, 2, 3, 4, 5]
nums[0] = 100
console.log(copyNums[0]) // 1
複製代碼

將原數組中的每個元素都複製到新數組中,這是深複製。

六、查找元素-indexOf()

indexof用來查找傳進來的參數在目標數組中是否存在。若是目標數組包含該參數,就返回該元素在數組中的索引,若是不包含,就返回-1

var names = ['www', 'qqq', 'hhh']
var isHave = names.indexOf('hhh')
var noHave = names.indexOf('w')
console.log(isHave) // 2
console.log(noHave) // -1
複製代碼

七、數組轉爲字符串-join(),toString()

var names = ['wu', 'qin', 'hao', 1, true, null, undefined]
var nameString1 = names.join()
var nameString2 = names.toString()
console.log(nameString1)
console.log(nameString2)
// wu,qin,hao,1,true, , 
// wu,qin,hao,1,true, , 
複製代碼

八、合併多個數組建立一個新數組-concat()

var arr1 = ['wu', 'qin', 'hao']
var arr2 = [1, 2, 3]
var arrConcat1 = arr1.concat(arr2)
var arrConcat2 = arr2.concat(arr1)
console.log(arrConcat1) // ["wu", "qin", "hao", 1, 2, 3]
console.log(arrConcat2) // [1, 2, 3, "wu", "qin", "hao"]
複製代碼

九、截取一個數組的子集建立一個新數組-splice()

splice()方法從現有數組裏截取一個新數組,該方法的第一個參數是截取的起始索引,第二個參數是截取的長度。

var arr1 = ['wu', 'qin', 'hao', 1, 2, 3]
var arr2 = arr1.splice(0, 3)
console.log(arr2) // ["wu", "qin", "hao"]
複製代碼

十、數組操做

push() // 末尾添加元素
unshift() // 開頭添加元素 
pop() // 末尾刪除元素
shift() // 開頭刪除元素
splice() // 中間位置添加和刪除元素
reverse() // 數組元素順序顛倒排序
sort() // 按照字典順序對字符串數組排序
複製代碼

十一、迭代器方法

迭代器就是對數組中的每一個元素應用一個函數,能夠返回一個值,一組值,或一個新數組

1、不生成新數組的迭代器方法

1.forEach()

接受一個函數做爲參數,對數組中的每一個元素使用該函數,沒有返回值。

var nums = [1, 2, 3, 4, 5]
nums.forEach((item) => {
    var a = item * item
    console.log(a)
})
// 1 4 9 16 25
複製代碼

2.every()

接受一個返回值爲Boolean類型的函數,對數組中的每一個元素使用該函數,若是對於全部的元素,改函數均返回true, 則該方法返回true。

var nums = [1, 2, 3, 4, 5]
var even = nums.every((item) => {
    return item % 2 === 0
})
console.log(even) // false

var nums2 = [2, 2, 2, 2, 2]
var even2 = nums2.every((item) => {
    return item % 2 === 0
})
console.log(even2) // true
複製代碼

3.some()

接受一個返回值爲Boolean類型的函數,只要有一個元素使得該函數返回true,則該方法就返回true。

var nums = [1, 2, 3, 4, 5]
var someEven = nums.some((item) => {
    return item % 2 === 0
})
console.log(someEven) // true
複製代碼

4.reduce()

接受一個函數,返回一個值

var nums = [1, 2, 3, 4, 5]
var sum = nums.reduce((total, current) => {
    return total + current
})
console.log(sum) // 15

var words = ['my', 'name', 'is', 'wuqinhao']
var sentence = words.reduce((total, current) => {
    return total + current
})
console.log(sentence) // mynameiswuqinhao
複製代碼

5.reduceRight()

與reduce不一樣,從右到左執行

var words = ['my', 'name', 'is', 'wuqinhao']
var sentence = words.reduceRight((total, current) => {
    return total + current
})
console.log(sentence) // wuqinhaoisnamemy
複製代碼

2、生成新數組的迭代器方法

1.map()

map() 和 forEach()有點像,對數組中的每一個元素使用某個函數。map返回一個新數組。

var nums = [1, 2, 3, 4, 5]
var numsChange = nums.map((item) => {
    return item * item
})
console.log(numsChange)
複製代碼

2.filter()

filter() 和 every()有點像,傳入一個返回值爲Boolean類型的函數,不一樣點是當對數組中的全部元素應用該函數,該方法並不返回true,而是返回一個新數組,該數組包含應用該函數後結果爲true的元素。

var words = ['wqh', 'www', 'qqq', 'hhh']
let filterWord = words.filter((item) => {
    if (item.indexOf('ww') > -1) {
        return true
    }
    return false
})
console.log(filterWord)
複製代碼

十二、對象數組

數組能夠包含對象,數組的方法和屬性對對象依然適用

var array = [{x:1,y:1},{x:2,y:2},{x:3,y:3}]
複製代碼

13.對象中的數組

在對象中,能夠適用數組存儲複雜的數據,

var obj = {
    x: 1,
    y: 2,
    array: [1, 2, 3, 4 ,5]
}
複製代碼
相關文章
相關標籤/搜索