1.用递归方法求1~100的和
function add(num1,num2){
if(num2+1>100){
return num1+num2;
}else{
return add(num1+num2,num2+1);
}
}
let sum=add(1,2) //sum=5050
2.数组去重
let arr = [1, 1, 2, 2, 8, 8,5,4]
let newarr=[]
arr.forEach(function (item) {
if (newarr.indexOf(item) === -1) {
newarr.push(item)
}
})
console.log(newarr) //[1,2,8,5,4]
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。Array.from 方法可以将 类数组或者集合转为数组,返回一个新数组。
let arr = [1, 1, 2, 2, 9, 5, 4]
function unique(arr) {
return Array.from(new Set(arr))
}
let a=unique(arr)
console.log(a)
此处可以简写(注意如果arr=“aab”,返回的也是数组形式的[ab])
let arr = [1,2,1,4]
let a = Array.from(new Set(arr))
console.log(a)
3.字符串去重
let str = "aabbccd"
let newarr = []
for (let char of str) {
if (newarr.indexOf(char) === -1) {
newarr.push(char)
}
}
console.log(newarr.toString()) // "abcd"
4.字符串反转
方法一:使用内置函数
reverse()
let str = "abcde"
let newstr = str.split("")
newstr.reverse()
newstr.join("")
console.log(newstr.toString())
方法二:使用函数unshift() 向数组的开头添加一个或者多个元素 (IE不支持)
let str = "abcde"
let newstr=[]
for (let s of str) {
newstr.unshift(s)
}
let result = newstr.toString()
console.log(result)
5.冒泡排序
从第一个开始,与后面一个数进行比较,比后面的数大就交换位置,这样第一轮最后一个数就是最大值,第二轮最后一个值就不需要比较所以每次比较个数就减去i。
let a = [1, 3, 5, 78, 99, 4, 5, 77, 33, 22, 43, 65];
let t
for (let i = 0; i <a.length-1; i++) {
for (let j = 0; j < a.length-1-i; j++) {
if (a[j] > a[j + 1]) {
t = a[j + 1]
a[j + 1] = a[j]
a[j] = t
}
}
}
6.sort()对象排序
let a = [
{ age: 51 },
{ age: 23 },
{ age: 53 },
{ age: 12 },
{ age: 24 },
{ age: 33 },
{ age: 53 },
{ age: 65 },
{ age: 8 },
{ age: 91 },
];
a.sort(function (a, b) {
return a.age - b.age //从小到大
})
7.每执行一次函数,结果增1
(闭包相关的局部变量在函数调用结束后会继续存在)
const func = (function () {
//补充函数内容
let a = 1
return function () {
return a++ //这里形成了闭包
}
})();
console.log(func()); // -> 1
console.log(func()); // -> 2
console.log(func());// -> 3
8.找出字符串中出现最多的字符和次数
function test() {
let str = "ababsdegabdsdbbb"
let obj = {}
for (let i = 0; i < str.length - 1; i++){
if (obj[str[i]]) {
obj[str[i]]++
} else {
obj[str[i]]=1
}
}
let value;
let count = 0;
//此处使用for in 遍历对象
for (let j in obj) {
if (obj[j]> count) {
value = j
count=obj[j]
}
}
console.log(value,count)
}
test()
9.事件委托(冒泡)
事件冒泡的原理来实现的,当你点击最下面的节点的时候,事件就会逐步向上传播事件,一层一层的向外执行
<ul id="aaa">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
e对象提供了一个属性叫target,可以返回事件的目标节点
let dom = document.getElementById("aaa");
console.log(dom);
dom.onclick = function (e) {
console.log("111");
alert(e.target.innerText);
};