var arr = [1,4,12,4,5,125,4512,4,4]
複製代碼
經過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() 返回數組中某個指定元素第一次出現的位置,沒有找到指定元素則返回-1bash
var result = arr.filter((item,index) => {
return arr.indexOf(item) === index
})
複製代碼
filter函數會返回當前循環的這一項的判斷結果,爲true則保留這一項, 反之捨棄這一項,在這裏第一次出現的4在索引1的位置,並記錄下來 ; 最後兩個4的索引 不等於第一次記錄4的索引位置,因此返回 false 並不會被保留函數
另外一種思路或者利用indexOf沒找到指定元素返回-1這一特性,把這心不重複的元素push到新數組中ui
let newArr = []
let result = arr.forEach(item => {
if(newArr.indexOf(item) === -1) {
newArr.push(item)
}
})
console.log(newArr)
// [ 1, 4, 12, 5, 125, 4512 ]
複製代碼
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 ]
複製代碼
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 ]
複製代碼
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 輪把其中最大一項放到對尾spa
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 和 最小值的 索引默認爲第一項,.net
第二個循環遍歷數組中除i
項外, 發現有比min
的元素小,當即從新對min
賦值,第二層循環結束。code
在第一層循環中,把當前這一項備份 ,爲了調換位置使用 var temp = a[i]
blog
當前這一項和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…