陣列去重方法一
<script>
// 把陣列中重複項去掉
// [1, 2, 3]
// indexOf
// [1, 2, 3]
// 定義一個新陣列 var newArr = []
// 迴圈arr裡面的每一項 var item = arr[i]
// 判斷新陣列中是否已經存在 item newArr.indexOf(item) === -1
// 如果不存在 再往裡面新增 newArr.push(item)
var arr = [1, 1, 1, 2, 3, 2, 3, 2, 3, 4, 4, 4]
var arr2 = [10, 10, 10, 2, 3, 2, 3, 2, 3, 4, 4, 4]
var arr3 = [100, 100, 100, 2, 3, 2, 3, 2, 3, 4, 4, 4]
// 一次封裝 多次複用
// 想給誰去重 就把誰當做實參傳遞進來unique(arr) 用形參變數ary接收
function unique(ary) {
var newArr = []
for (var i = 0; i < ary.length; i++) {
var item = ary[i]
if (newArr.indexOf(item) === -1) {
newArr.push(item)
}
}
return newArr
}
var a1 = unique(arr)
console.log('a1', a1)
var a2 = unique(arr2)
console.log('a2', a2)
// var newArr = []
// for (var i = 0; i < arr.length; i++) {
// var item = arr[i] // 1 1 1 2
// // [1].indexOf(1) 0 === -1
// // [1].indexOf(2) -1 === -1
// if (newArr.indexOf(item) === -1) {
// newArr.push(item) // [1, 2]
// }
// }
// console.log(newArr)
</script>
複製程式碼
陣列去重方法二
<script>
var arr = [1, 1, 2, 2, 3, 2, 3, 4, 4, 4]
function unique(ary) {
var newArr = []
var obj = {}
for (var i = 0; i < ary.length; i++) {
var cur = ary[i]
if (!obj[cur]) {
newArr.push(cur)
obj[cur] = true
}
}
obj = null
return newArr
}
var ary = unique(arr)
console.log('ary', ary)
// var newArr = []
// var obj = {}
// for (var i = 0; i < arr.length; i++) {
// var cur = arr[i] // 1 1 2 2
// // 如果物件中不存在這個屬性 說明我們沒有新增過
// // !obj[1] => !true => false
// // !obj[2] => !undefined => true
// // !obj[2] => !true => false
// if (!obj[cur]) {
// newArr.push(cur) // [1, 2]
// obj[cur] = true // {1: true, 2: true}
// }
// }
// console.log(newArr)
// // 由於這個物件沒用了 通常我們會 釋放記憶體
// obj = null
</script>
複製程式碼
雙重迴圈去重
<script>
// 外層迴圈出來每一個當前項cur, 內層迴圈迴圈出來當前項的每個後一項last
// 用當前項cur和 每個後一項last 分別比較===
// 如果有相同的(===) 就刪除這一項 splice(j, 1)
// var arr = [1, 1, 2, 2, 3, 2, 3, 4, 4, 4]
// var arr = [1, 1, 1, 1]
// cur = 1 (a)
// // 內層迴圈 j = 0 + 1
// last = 1 (b)
// if cur === last
// arr.splice(j, 1)
// // [1, 1, 1]
// j++ // j = 2
// // [1, 1, 1]
// // 內層迴圈第二次 j = 2
// cur = 1 (0)
// last = 1 (2)
// if cur === last
// arr.splice(j, 1)
// // [1, 1]
// j++ // j = 3
// 3 < 2
// 當我們用splice刪除前面某一項時候 後面的就會往前挪一位,陣列塌陷
// 用於我們再刪除的時候 後面的會往前挪一位
// 我們需要再刪除的時候 讓我們再從當前這個索引位置比較一次
// j = 1
// var arr = [2, 2, 2, 2]
// j = 1
// j++ j = 2
// for (var i = 0; i < arr.length - 1; i++) {
// // 當前項 i當前項索引
// var cur = arr[i]
// console.log('大迴圈cur', cur)
// // 把當前項cur的後一項依次取出來進行比較
// for (var j = i + 1; j < arr.length; j++) {
// var last = arr[j]
// // 陣列中有和當前項 重複的值
// if (cur === last) {
// arr.splice(j, 1)
// j--
// }
// }
// }
// i++
// i= i + 1
//程式碼執行
var arr = [2, 2, 2, 2]
for (var i = 0; i < arr.length - 1; i++) {
// 當前項 i當前項索引
var cur = arr[i]
console.log(i)
console.log('大迴圈cur', cur)
// 把當前項cur的後一項依次取出來進行比較
for (var j = i + 1; j < arr.length;) {
var last = arr[j]
// 陣列中有和當前項 重複的值 就刪除這一項
cur === last ? arr.splice(j, 1) : j++
// if (cur === last) {
// arr.splice(j, 1)
// } else {
// j++
// }
}
}
console.log(arr)
for (var i = 0; i < arr.length - 1; i++) {
var cur = arr[i]
for (var j = i + 1; j < arr.length;) {
cur === arr[j] ? arr.splice(j, 1) : j++
}
}
</script>
複製程式碼