常见面试题之一!!!
数组去重
方法一 forEach
var arr = ['1','2','3','4','3','2','6','7','a','b','a'];
const unique = arr => {
let obj = {};
arr.forEach(value=>{
obj[value] = 0;
})
return Object.keys(obj);
}
console.log(unique(arr))
方法二 Set
var arr = ['1','2','3','4','3','2','6','7','a','b','a'];
const unique = arr => {
return new Set(arr)
}
console.log(unique(arr))
方法三 filter
var arr = ['1','2','3','4','3','2','6','7','a','b','a'];
const unique = arr => {
return arr.filter((el,index,array)=>{
return index == array.indexOf(el)
})
}
console.log(unique(arr))
数组排序
即用js语言实现sort()这个方法。
方法一 选择排序,双循环,外层循环固定位置,内层循环找出最小的数。
var arr = [4,9,2,1,8,7,6,3,5];
const sort = arr => {
arr.forEach((v,i)=>{
for(let j=i+1;j<arr.length;j++){
if (arr[i] > arr[j]) {
[arr[i],arr[j]] = [arr[j],arr[i]]
}
}
})
return arr;
}
console.log(sort(arr))
方法二 冒泡排序,双循环,外层循环移动游标,内层循环遍历位置,通过相邻位置对比大小换位
var arr = [4,9,2,1,8,7,6,3,5];
const sort = arr => {
let isSwap;
for(let i=0;i<arr.length;i++){
isSwap = false;
for(let j=0;j<arr.length;j++){
if(arr[j] > arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
isSwap = true;
}
}
if(!isSwap){
break;
}
}
return arr;
}
console.log(sort(arr))
数组最大差值
方法一:Math.max和Math.min
var arr = [4,42,60,18,28,17,16,33,25];
const difference = arr => {
return Math.max(...arr) - Math.min(...arr);
}
console.log(difference(arr))
方法二:单循环,用变量max和min保存最大值和最小值,求差
var arr = [4,42,60,18,28,17,16,33,25];
const difference = arr => {
let max = arr[0],min = arr[0];
for(let i=1;i<arr.length;i++){
max = arr[i] > max ? arr[i] : max;
min = arr[i] < min ? arr[i] : min;
}
return max - min;
}
console.log(difference(arr))