js算法题

1、传入一个数字,实现阶乘 5 * 4 * 3 * 2 * 1

/*param num 值可以为任意数字
*思路: 第一次递归 num   乘 num-1 (5 乘 4)
*	   第二次递归 num-2 乘 num-2-1 (3 乘 2) 以此类推
*      当阶乘的当前值小于等于 1 时跳出递归
**/
bSum(num) {
	if(num-2 <= 1) return
    let sum = num * (num-1)
    this.bSum(num-2)
    console.log(sum)
},

2、计算对象长度

/*思路: Object.keys(o)获取对象的 key 值,返回数组[a,b,c]
*	    for...in 循环,获取可枚举属性
**/
let o = {
	a: 1,
    b: 2,
    c: 8
}
// 第一种 
const a = Object.keys(o).length
// 第二种
let count = 0;
for( let item in o) {
    if(Object.prototype.hasOwnProperty.call(o, item)) {
        count++
    }
}

3、冒泡排序

/*思路: 相邻元素两两对比,元素交换,大的元素交换到后面
*	    for...in 循环,获取可枚举属性
**/
bSort() {
	var arr = [29,45,51,68,72,97];
	for (var i = 0; i < arr.length-1; i++) {
		for (var j = 0; j < arr.length - 1 - i; j++) {
    		if (arr[j] > arr[j + 1]) {
        		var temp = arr[j];
            	arr[j] = arr[j+1];
            	arr[j+1] = temp;
        	}
    	}
    }
    return arr;
}

4、map 和 forEach 区别

/*思路: map返回计算后的新数组
*	    for...in 循环,获取可枚举属性
**/
changeArr() {
	let arr = [1,2,3,4]
    let mapArr = arr.map((ele,i)=> {
    	if(ele > 2) {
        	return ele * 2
        }
     }) //[undefined,undefined,6,8]

     arr.forEach((ele,i)=> {
        if(ele > 2) {
             arr[i] = arr[i] * 2
        }
     }) //[1,2,6,8]
}

5、去掉数组中出现 3 次以上的数字

/* 思路:定义一个 map 结构
*     {key: value} key代表 arr 里的 1,2,3,4
*      value代表出现的次数
**/
deleteData() {
    let arr = [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4]
    let map = new Map()
    arr.forEach((ele,index) => {
        if(!map.has(ele)) {
        //代表没有的话就插入一个 key = 1, value = 1 
            map.set(ele, 1)
        }else {
        	//有的话获取 key的 value 值
            let i = map.get(ele)
            if(i === 2){
            	// 超过 2 的话删除原数组里这个值
                arr.splice(index, 1)
            }else {
            	// 不超过 2 的话就累加一次
                map.set(ele, map.get(ele) + 1)
            }
        }
    })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值