前端面试

1.冒泡排序 选择排序

冒泡排序
冒泡排序规则:前后两两进行比较,如果符合比较的条件,就交换两个数的位置,直到所有的数据,都符合从小到大条件,结束排序。
规律:每一轮比较,都会找出一个较大的数,放在正确的位置。
比较的轮数 = 数组长度 - 1;
每一轮比较的次数 = 数组长度 - 当前轮数;
具体代码如下:

//冒泡排序
let arr = [100, 55, 5, 20, 8];
for (let i = 0; i < arr.length - 1; i++) {  //决定比较几轮
    for (let j = 0; j < arr.length - i - 1; j++) {  //决定每一轮比较多少次 
        if (arr[j] > arr[j + 1]) {
            let temp = arr[j];  // 变量互换位置
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}
console.log(arr); // [ 5, 8, 20, 55, 100]

选择排序
规律:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列。
比较的轮数 = 数组长度 - 1
每一轮比较次数 = 数组长度 - 当前轮次

具体代码如下:

//用选择排序的方法从小到大排列数组元素。
let arrs = [9, 8, 7, 6, 5, 4];
//比较的轮数
for(let i = 0; i < arrs.length - 1; i++){
    //每轮比较的次数
    for(let j = i + 1; j < arrs.length; j++){
        if(arrs[i] > arrs[j]){
            let tmp = arrs[i];
            arrs[i] = arrs[j];
            arrs[j] = tmp;
        }
    }
}
console.log(arrs);  //[ 4, 5, 6, 7, 8, 9 ]

2.字符串中大写字母出现的次数

思路:用ASCII码 来判断 65-90 是大写字母的范围

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。
具体代码如下:

let str = 'ASDdvdbFDGFGNaaR';
let temp = 0;
for (let i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) >= 65 && str.charCodeAt(i) <= 90) {
        temp++;
    }
}
console.log(temp);  //10

3.字符串中字母相同的个数

思路:声明一个空的对象,用字符串中的值 作为对象的key 键名 value为存在的个数

let str2 = 'aaabbbfgtfffdfhgnfh';
let obj = {}; //声明一个空的对象  对象中的key值是不能重复存在的  所以用str2里的每一个字母作为key的值
for (let i = 0; i < str2.length; i++) {
    let char = str2.charAt(i);  //遍历出str2里面的每一个字母
    if (obj[char]) {
        obj[char]++;  //存在则++
    } else {
        obj[char] = 1;  //不存在则value 赋值为1
    }
}
console.log(obj);

4.数组去重

第一种方法(set,get)
set里不可以出现重复的元素 并且是无序的

let arr2 = [10, 10, 50, 60, 82, 50, 10, 65, 80, 90];
let setArr = new Set(arr2);  //去重了  但是没有顺序  Set { 10, 50, 60, 82, 65, 80, 90 } 是一个对象
let getArr = Array.from(setArr);  // [10, 50, 60, 82, 65, 80, 90]  去重并且排序
console.log(getArr);

第二种方法(indexOf)
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。–有值
没有值则返回 -1;

let temp2 = [];

for (let i = 0; i < arr2.length; i++) {
    if (temp2.indexOf(arr2[i]) === -1) {
        temp2.push(arr2[i])
    }
}
console.log(temp2);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值