假设有数组array = [1,5,2,3,4,2,3,1,3,4]
,你要写一个函数unique
,使得unique(array)
的值为 [1,5,2,3,4]
。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
let array = [1,5,2,3,4,2,3,1,3,4]
function unique(array){
let hash = []
for(let i=0;i<array.length; i++){
hash[array[i]] = true
}
let result = []
for(let key in hash){
result.push(key)
}
return result
}
|
这种方法只支持数字或者字符串数组,如果数组里面有对象,就会出错。
1
2
3
4
5
|
let array = [1,5,2,3,4,2,3,1,3,4]
function unique(array){
return Array.from(new Set(array))
}
|
该方法使用的API 太新,一些浏览器不支持。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
let array = [1,5,2,3,4,2,3,1,3,4]
function unique(array){
let map = new Map();
let result = []
for (let i = 0; i < array.length; i++) {
if(map.has(array[i])) { // 判断 map 中是否已有该 key
continue
} else { // 如果 map 中没有该 key,就加入 result 中
map.set(array[i], true);
result.push(array[i]);
}
}
return result;
}
|
该方法同样有API 太新,一些浏览器不支持的问题。
给出正整数数组array = [2,1,5,3,8,4,9,5]
,请写出一个函数sort
,使得sort(array)
得到从小到大排好序的数组[1,2,3,4,5,5,8,9]
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
//确定最小数下标
let minFlag = (strings) => {
let flag = 0;
for (let i = 0; i < strings.length; i++) {
if (strings[i] < strings[flag]) {
flag = i;
}
} return flag
};
//交换两数位置
let swap = (array, i, j) => {
let temp = array[i];
array[i] = array[j];
array[j] = temp;
};
//
function sort(array) {
for (let i = 0; i < array.length - 1; i++) {
//通过slice切片不改变原数组的方法,确定最小值下标,交换至首位
//然后“切除”首位,进行下轮最小筛选,推送至次位,直至排序完成
let index = minFlag(array.slice(i)) + i ;
if (index !== i) {
swap(array, index, i );
}
}
return array;
}
let array = [2,1,5,3,8,4,9,5]
console.log(sort(array))
|