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)
}
}
})
}