修改原代码,让输出结果为0-9
for(var i = 0;i < 10;i++){
setTimeout(()=>{console.log(i)},0)
}
for(let i = 0;i < 10;i++){
setTimeout(()=>{console.log(i)},0)
}
for(var i = 0;i < 10;i++){
(function fn (i){
setTimeout(()=>{console.log(i)},0)
})(i)
}
function fn (i){
console.log(i)
}
for(var i = 0;i < 10;i++){
setTimeout(fn.bind(null,i),0)
}
冒泡排序
var array = [5, 4, 3, 2, 1]
var temp = 0
for (var i = 0
for (var j = 0
if (array[j] > array[j + 1]){
temp = array[j + 1]
array[j + 1] = array[j]
array[j] = temp
}
}
}
用js计算1-10000中出现的0 的次数
<!-- 一大步 -->
new Array(10000)
.fill('')
.map((_, index) => index + 1)
.filter(item => /0/.test(item))
.reduce((count, item) => { return count + (String(item).match(/0/g) || []).length}, 0)
<!-- 三小步 -->
1. var arr = new Array(10000).fill('').map((item,index)=>index+1 )
2. var arr_filter = arr.filter(item=>/0/.test(item))
3. var arr_reduce = arr_filter.reduce((count, item) => { return count + (String(item).match(/0/g) || []).length}, 0)
二维数组降维
var arr = [[1, 2], [3, 4]];
function Jw(obj){
return Array.prototype.concat.apply([],obj);
}
Jw(arr); // [1, 2, 3, 4]
统计字符串中出现次数最多的字符
var str = 'a112ccaacsdwdcccacc2cc'
var recordObj = {}
for (var i = 0
if(!recordObj[(str.charAt(i))]){
recordObj[(str.charAt(i))] = 1
}else{
recordObj[(str.charAt(i))]++
}
}
var target=''
var leng=0
for(var i in recordObj){ // 找出值和次数
if(recordObj[i] > length){
target = i
len = recordObj[i]
}
}
数组去重
1.循环用includes判断数组是否包含某个值去重
2.用sort排序判断相邻是否相等去重;
3.ES6使用Array.from(new Set(arr))去重
4.ES5两层for循环splice去重
var arr=[1,2,2,3,1,'a','1','3','b','a']
var newarr=[]
for(var i=0
for(var j=i+1
if(arr[i]===arr[j]){//第一个等同于第二个,splice方法删除第二个
arr.splice(j,1)
j--
}
}
}
JS递归的方式1-100求和
function getReduce (num1,num2,maxNum){
var num = num1*1 + num2*1;
if(num2+1 > maxNum){
return num
}else{
return getReduce(num, num2+1, maxNum)
}
}
console.log(getReduce(1,2,100))
数组降维 + 去重 + 排序
var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
Array.from(new Set(arr.flat(Infinity))).sort((a,b)=>{return a-b})
// 结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
函数运算包含加减乘除的字符串
<!-- 原始数据 -->
var s = '3+6*7/3-2*2'
<!-- 计算函数 -->
var calculate = function(s) {
s = s.trim()
const stack = new Array()
let preSign = '+'
let num = 0
const n = s.length
for (let i = 0
if (!isNaN(Number(s[i])) && s[i] !== ' ') {
num = num * 10 + s[i].charCodeAt() - '0'.charCodeAt()
}
if (isNaN(Number(s[i])) || i === n - 1) {
switch (preSign) {
case '+':
stack.push(num)
break
case '-':
stack.push(-num)
break
case '*':
stack.push(stack.pop() * num)
break
default:
stack.push(stack.pop() / num | 0)
}
preSign = s[i]
num = 0
}
}
let ans = 0
while (stack.length) {
ans += stack.pop()
}
return ans
}
<!-- 测试结果 -->
calculate(s) // 13
数组扁平化
var data = [
{
id: 1,
title: "课程 1",
children: [{
id: 4,
title: "课程 1-1"
},{
id: 5,
title: "课程 1-2",
children: [{
id: 6,
title: "课程 1-2-1"
},{
id: 7,
title: "课程 1-2-2"
}],
}]
},{
id: 2,
title: "课程 2"
},{
id: 3,
title: "课程 3"
}
];
function formateList(currarr){
var newarr=[];
currarr.forEach((item,index)=>{
if(item.children && item.children instanceof Array){
let temp=item.children;
delete item.children;
newarr.push(item);
newarr=[...newarr,...formateList(temp)]
}else{
newarr.push(item)
}
})
return newarr;
}
formateList(data)
求数组的交集
let nums1 = [12,23,34,37,41,67,89,91];
let nums2 = [6,23,33,37,44,67];
var arr = [];
nums1.forEach((item)=>{
nums2.includes(item) ? arr.push(item) : null
})
console.log(arr); // [23, 37, 67]
字符串字母里面查找出现次数最多的字母
var str = 'abkckddckakahkjlklylkdlswklokl'
var obj = {}
var maxcount = 0
var letter
for(var i = 0
if(obj[str[i]]){
obj[str[i]]++
}else{
obj[str[i]] = 1
}
}
for(var key in obj){
if(obj[key] > maxcount){
maxcount = obj[key]
letter = key
}
}
console.log(letter)
实现绑定点击事件打印li的index
<div id="box">
<li>第一个</li>
<li>第2个</li>
<li>第3个</li>
<li>第一个</li>
<li>第5个</li>
<li>第一个</li>
<li>第7个</li>
<li>第一个</li>
<li>第9个</li>
<li>第一个</li>
</div>
var box = document.getElementById('box');
var nodelist = Array.prototype.slice.call(
document.getElementsByTagName('li')
)
box.onclick=function(e){
console.log(nodelist.indexOf(e.target))
}