var data = [1,2,4,3,5,2,1,3,2] var newData = [] for(var i=0;i<data.length;i++) { for(var j=i+1;j<data.length;j++) { if (data[i] == data[j]) { // j = i = i + 1 j = ++i } } newData.push(data[i]) } console.log(newData.sort())
外面循環是每次取數組一個值,裏面的循環是遍歷除了取了的值之外的後面的全部值做比較,若是有相等的話,就跳過進行下輪循環比較,若是當前值沒有找到任何相等的值,就添加到新數組es6
這個就是取數組裏面的值取一一比較,若是這個值在數組後面的項裏有了,那我就不要這個值,依次類推,其實就是取數組裏這個值的最後一項,由於已是最後一項了,不可能有相等的數組
const arr = [1, 2, 3, 5, 4, 3, 2, 1]; for (var i=0;i<arr.length; i++) { for (var j=i+1;j<arr.length; j++) { if (arr[i] === arr[j]) { arr.splice(j,1) j-- } } } console.log(arr) // 打印結果 [1, 2, 3, 5, 4]
經過雙循環判斷數組裏是否有相同的值,若是有相同的值,就將後面相同的值去掉,splice方法會改變原數組,splice()方法返回的是分割的值的數組,原數組就是除去被分割出去的值後剩餘值的數組閉包
爲社麼j--?由於分割後,原數組長度減一了,上一個值降下來了,若是j不減1,在數組裏面的j就是上一個值了,在加一下,就至關於跳過了,因此須要減1而後再執行循環裏的加1獲取上一個值code
var data = [1,2,4,3,5,2,1,3,2] var newData = [] for(var i=0;i<data.length;i++) { ;(function () { if (newData.indexOf(data[i]) === -1) { newData.push(data[i]) } })(i); } console.log(newData.sort())
經過循環遍歷,傳入循環數組的索引,而後經過indexOf
判斷新數組裏面是否有這個數組索引的值,若是沒有,則將數組索引的值添加到新數組裏面對象
var data = [1,2,4,3,5,2,1,3,2] var newData = [] var obj = {} for(var i=0;i<data.length;i++) { if (!obj[data[i]]) { obj[data[i]] = 1 newData.push(data[i]) } } console.log(newData.sort())
這個方法利用的就是同一個對象的key
值不能重複,因此經過判斷對象裏是否有當前數組索引的值,若是沒有,則將這個數組值做爲key
添加到對象裏面,經過也把這個值添加到新數組裏面,若是對象有這個key
值和數組索引的值相同,則跳過索引
var data = [1,2,4,3,5,2,1,3,2] var newData = [] newData = new Set(data) console.log(newData)
這個就不去深究了io