JS原生

1.字符串操作

Question:
在开发中,我们经常会碰到将abc-xyz这类格式的字符串转为AbcXyz形式的驼峰字符串进行处理, 例如:hello-world我们希望能够变成驼峰风格的HelloWorld,请编写代码实现这个camelize(str)方法

function camelize(str) {
    //补充代码
  var strArr = str.split('-');
  return strArr.map(item=>{
  	let upperCase = item[0].toUpperCase();
  	return upperCase+item.slice(1)
  }).join('');
}
camelize('hello-world');

2. a链接监听

Question:
a链接点击监听实现 监听网页上的所有a链接,当用户点击一个a链接随机加上时间戳

document.body.addEventListener('click',function(e){
  let target=e.target;
  console.log(target.nodeName)
  if(target.nodeName==='A'){
    e.preventDefault();
    let href=target.href+Math.random();
    window.location.href=href;
  }
},false)

3.数组去重

Question:
请将编写一个函数将 [3, 5, 7, 2, 1, 8, 9, 0, 5, 23, 15, 5, 1, 5, 8] 这样的一个组件中重复的元素去除掉

function splice(){
    var _arr=[3, 5, 7, 2, 1, 8, 9, 0, 5, 23, 15, 5, 1, 5, 8]
        for(var i=0;i<_arr.length;i++){
            for(var n=i+1;n<_arr.length;n++){
                if(_arr[i]===_arr[n]){
                    _arr.splice(n--,1);//因为元素数量减少了,如果向前挪动一个下标3个以上的连续重复的元素会有遗漏
                }
            }
        }
        console.log(_arr);
    }
    splice()

4.评分组件

Question:
可根据传入的评分和总数,返回评星结果(用 ★ 和 ☆ 描述) 2. 评分必选项,四舍五入,总数可选,大于0的整数,默认为5 3. 对于评分为空或小于0、评分大于总数、总数小于0或总数非整数的情况,返回’error’ 示例: getRate(4, 8); // ★★★★☆☆☆☆
getRate(3.4); // ★★★☆☆
getRate(5, 2); // ‘error’ getRate(-2); // ‘error’
getRate(3, 5.5); // ‘error’

5.性能优化

5.1函数的节流与原生事件

Question:
请用js实现一个监听浏览器窗口变化的函数,当浏览器窗口的宽度大于等于 600px 的时候console.log(‘hello’)(持续大于等于600px的话打印一次即可),请用你觉得最优的实现

var throttle = function(func, ms){
    var start = +new Date();
    
    return function(){
        var now = +new Date();
        if (now- start > ms){
            setTimeout(function(){
                func();
            }, ms);
            start = now;
        }
    }
}

var flag = false;
var resizeFunc = throttle(function(){
    if (!flag && window.innerWidth >= 600){
        console.log('hello');
        flag = true;
    }else if(window.innerWidth < 600){
        flag = false;
    }
}, 300);

window.addEventListener('resize', resizeFunc);
6.关于排序
6.1二分排序

Question:
写一个有效的算法完成矩阵搜索,这个矩阵有如下特点: 1) 矩阵中的每行数字都是经过排序的,从左到右依次变大。 2) 每行的第一个数字都比上一行的最后一个数字大 例如: [ [2, 4, 8, 9], [10, 13, 15, 21], [23, 31, 33, 51] ] 实现一个函数,搜索这个数组 输入:4,返回:true 输入:3,返回:false

const arr =  [
    [2,   4,  8,  9],
    [10, 13, 15, 21],
    [23, 31, 33, 51]
];



// 一维数组二分法查找
function searchArray(arr, num){
    console.log('arr...', arr, num);
    let len = arr.length;
    if (arr[0] > num || arr[len-1] < num){
        return false;
    }else {
        let mid = Math.floor(arr.length/2);
        if (arr[mid] > num){
            return searchArray(arr.slice(0, mid), num);
        }else if(arr[mid] < num){
            return searchArray(arr.slice(mid+1, len), num);
        }else{
            return true;
        }
    }
}

// 二维数组二分查找
function search(arr, num){
    console.log('arr..', arr);
    let len = arr.length,
        arrLen = arr[0].length;
    let middle = Math.floor(arr.length/2);
    if (arr[0][0] > num || arr[len-1][arrLen-1] < num){
        return false;
    }else{
        if (arr[middle][0] > num ){
            // 当最小值大于num,在前面查找
            return search(arr.slice(0, middle), num);
        }else if(arr[middle][arrLen-1] < num){
            // 当最大值小于num,在后面查找
            return search(arr.slice(middle+1, len), num);
        }else{
            // 在这中间,调用一维数组查找方法
            return searchArray(arr[middle], num);
        }
    }
}
let result = search(arr, 52);
console.log('查询结果...', result);
6.1快速排序
let arr1 = [1,23,7,5,3,2,8,2,19,99,10,12,17,78,87];
function quickStart(arr){
    let mid = Math.floor(arr.length/2);
    let left = [],
        right = [];
    // 递归终止条件
    if (arr.length <= 1){
        return arr;
    }
    arr.forEach(item=>{
        if (item > arr[mid]){
            right.push(item);
        }else if(item < arr[mid]){
            left.push(item);
        }
    })
    return quickStart(left).concat([arr[mid]], quickStart(right));
}
console.log('排序前', arr1, '排序后:', quickStart(arr1));
6.3冒泡排序
let arr1 = [1,23,7,5,3,2,8,2,19,99,10,12,17,78,87];
function bubble(arr){
    for (let i=0, len=arr.length; i<len; i++){
        for (let j=i+1, len=arr.length; j<len; j++){
            let tmp = 0;
            if (arr[i] > arr[j]){
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
            }
        }
    }
    return arr;
}
console.log('排序前', arr1, '排序后:', bubble(arr1));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值