1. 程式人生 > >ES6和ES5中的遍歷

ES6和ES5中的遍歷

屬性的遍歷
ES6一共有5種方法可以遍歷物件的屬性。
(1)for…in
for…in迴圈遍歷物件自身的和繼承的可列舉屬性(不含Symbol屬性)。
(2)Object.keys(obj)
Object.keys返回一個數組,包括物件自身的(不含繼承的)所有可列舉屬性(不含Symbol屬性)。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一個數組,包含物件自身的所有屬性(不含Symbol屬性,但是包括不可列舉屬性)。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一個數組,包含物件自身的所有Symbol屬性。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一個數組,包含物件自身的所有屬性,不管是屬性名是Symbol或字串,也不管是否可列舉。

以上的5種方法遍歷物件的屬性,都遵守同樣的屬性遍歷的次序規則。

首先遍歷所有屬性名為數值的屬性,按照數字排序。
其次遍歷所有屬性名為字串的屬性,按照生成時間排序。
最後遍歷所有屬性名為Symbol值的屬性,按照生成時間排序。
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
// ['2', '10', 'b', 'a', Symbol()]

上面程式碼中,Reflect.ownKeys方法返回一個數組,包含了引數物件的所有屬性。這個陣列的屬性次序是這樣的,首先是數值屬性2和10,其次是字串屬性b和a,最後是Symbol屬性。

資料結構的遍歷:


一、Array:

ES5:

(1)Array.prototype.forEach(function(item,index,array){…})

(2)Array.prototype.map(function(value,index,array){…//return value,該值會被插入新陣列})對映為一個新陣列

(3)Array.prototype.some(function(item){…//條件})陣列中某一項滿足則停止執行,並且返回true

(4)Array.prototype.every(function(item){…//條件})陣列中有一項不滿足則停止執行,並且返回false.

(5)Array.prototype.filter(function(item){…//return true或者false})返回過濾後的新陣列

(6)Array.prototype.indexOf(item)

(7)Array.prototype.lastIndexOf(item)

(8)Array.prototype.reduce(function (previous, current, index, array) {…return value//返回值作為下一次迴圈的previous的值})

(9)Array.prototype.reduceRight同上,但是index的初始值為array.length-1

ES6:

(1)Array.from(parameter),用的最多應該是將set轉化為Array,或者將元素選擇器的結果轉化為陣列

(2)Array.of(parameter)消除new Array(parameter)由於引數個數不同而出現的過載

(3)Array.prototype.copyWithin(target, start = 0, end = this.length)沒想到有什麼好用的

(4)Array.prototype.find(function(value, index, arr) {…//條件})找到第一個返回值為true的成員

(5)Array.prototype.findIndex(function(value.index,arr){…//條件})作用同上,返回index

(6)Array.prototype.keys()獲取鍵名遍歷器

(7)Array.prototype.values()獲取鍵值遍歷器

(8)Array.prototype.entries()獲取鍵值對遍歷器

二、Set資料結構

該資料結構更新或建立時會去重,類似===但是在這裡NAN和NAN是相等的

(1)Set.prototype.add(parameter)

(2)Set.prototype.delete(parameter)

(3)Set.prototype.has(parameter)

(4)Set.prototype.clear()

(5)Set.prototype.keys()返回鍵名的遍歷器

(6)Set.prototype.values()返回鍵值遍歷器

(7)Set.prototype.entries()返回鍵值對遍歷器

(8)Set.prototype.forEach(function(value.key,set){})遍歷

三、Map資料結構

鍵值對的集合,但是鍵名可以為物件,當鍵名為物件時判斷他的記憶體地址相同則認為鍵名相同

(1)Map.prototype.set(key,value)

(2)Map.prototype.get(key)

(3)Map.prototype.has(key)

(4)Map.prototype.delete(key)

(5)Map.prototype.clear()

(6)Map.prototype.keys()

(7)Map.prototype.values()

(8)Map.prototype.entries()

(9)Map.prototype.forEach(function(value,key,map){…})