陣列去重解析
var arr = [1,4,12,4,5,125,4512,4,4]
複製程式碼
Set建構函式
通過new Set() 生成一個類陣列,並沒有重複的值
let [...result] = new Set(arr)
// [ 1, 4, 12, 5, 125, 4512 ]
複製程式碼
或者可以使用Array.from(), 可以把類陣列轉換成陣列結合使用
let result = Array.from(new Set(arr))
// [ 1, 4, 12, 5, 125, 4512 ]
複製程式碼
Array.indexOf()
Array.indexOf() 返回陣列中某個指定元素第一次出現的位置,沒有找到指定元素則返回-1
var result = arr.filter((item,index) => {
return arr.indexOf(item) === index
})
複製程式碼
-
filter函式會返回當前迴圈的這一項的判斷結果,為true則保留這一項, 反之捨棄這一項,在這裡第一次出現的4在索引1的位置,並記錄下來 ; 最後兩個4的索引 不等於第一次記錄4的索引位置,所以返回 false 並不會被保留
-
另一種思路或者利用indexOf沒找到指定元素返回-1這一特性,把這心不重複的元素push到新陣列中
let newArr = []
let result = arr.forEach(item => {
if(newArr.indexOf(item) === -1) {
newArr.push(item)
}
})
console.log(newArr)
// [ 1, 4, 12, 5, 125, 4512 ]
複製程式碼
- 類似indexOf 方法使用js實現去重,定義一個空陣列,迴圈要去重的陣列,如果新陣列中有當前這一項break,如果沒有就push進去
let newArr = []
const isRepeat;
for(let i=0; i<arr.length;i++) {
isRepeat = false
for( let j=0; j< newArr.length;j++) {
if(arr[i] === newArr[j]) {
isRepeat = true
break
}
}
if(!isRepeat) {
newArr.push(arr[i])
}
}
console.log(newArr)
[ 1, 4, 12, 5, 125, 4512 ]
複製程式碼
Map建構函式
let tmp = new Map()
let result = arr.filter(item => {
return !tmp.has(item) && tmp.set(item, 1)
})
console.log(result)
// [ 1, 4, 12, 5, 125, 4512 ]
複製程式碼
obj特性去重
let arr = [1, 2, 3, 4, 12, 4, 1, 2]
function fn(arr) {
let obj = {};
arr.forEach((item) => {
obj[item] = '';
})
return Object.keys(obj)
}
console.log(fn(arr))
// [ '1', '2', '3', '4', '12' ]
複製程式碼
氣泡排序
var a = [45,67,23,88,21,6,99];
for(let i=0; i < a.length-1; i++) {
for(let j=0; j< a.length-1-i; j++) {
if(a[j] > a[j+1]) {
var temp = a[j]
a[j] = a[j + 1]
a[j+1] = temp
}
}
}
console.log(a)
// [ 6, 21, 23, 45, 67, 88, 99 ]
複製程式碼
相鄰兩個比較,i項大於i+1項互換位置,迴圈a.length -1 輪把其中最大一項放到對尾
選擇排序
var a = [45,67,23,88,21,6,99];
let min; // 最小值
let pos; // 最小值下標
for(let i=0;i<a.length;i++) {
min = a[i]
pos = i
for(let j=i+1;j<a.length;j++) {
if(a[j] < min) {
min = a[j]
pos = j
}
}
var temp = a[i]
a[i] = min
a[pos] = temp
}
console.log(a)
// [ 6, 21, 23, 45, 67, 88, 99 ]
複製程式碼
假定最小值min 和 最小值的 索引預設為第一項,
第二個迴圈遍歷陣列中除i
項外, 發現有比min
的元素小,立即重新對min
賦值,第二層迴圈結束。
在第一層迴圈中,把當前這一項備份 ,為了調換位置使用 var temp = a[i]
當前這一項和min
調換位置 a[i] = min
a[pos] = temp
插入排序
var a=[45,67,23,88,21,6,99];
for(let i=0;i<a.length;i++) {
for(let j=i;j>0 && a[j] < a[j-1];j--) {
var temp = a[j]
a[j] = a[j-1]
a[j-1] = temp
}
}
console.log(a)
// [ 6, 21, 23, 45, 67, 88, 99 ]
複製程式碼
當前這一項元素和它的前一項進行比較
如果當前的值小於他的前一項那麼調換位置, j--
會使當前位置向前走一位,直到找到比他小的交換位置後,如果j < 0
後跳出迴圈。最小值會移到陣列第一項。
排序演算法——插入排序 blog.csdn.net/xiaoping091…