快速排序
let ary = [52,89,56,156,315,165,314,951,65];
/*
思路:先取数组的中间项,比这项大的放到一个数组,比这项小的放一个数组,然后合并;对于这两个数组 再去执行以上操作
*/
function sort(arr){
if (arr.length<=1) return arr;
let midIndex=Math.floor(arr.length/2);
let mid = arr[midIndex];
let left=[],right=[];
for (let i=0;i<arr.length;i++){
if(i !=midIndex){
if(arr[i]>mid){
right.push(arr[i]);
}else{
left.push(arr[i]);
}
}
}
console.log(left,mid,right);
return sort(left).concat(mid,sort(right));
}
console.log(sort(ary));
函数
// 箭头函数虽然没有arguments这个关键字,但是可以通过...剩余运算符来实现这个功能
// 普通函数也能使用剩余运算符
var add = (a,...qqq)=>{
// ... 剩余运算符
// 没有arguments
console.log(qqq);
}
add(1,2,3,4)// 1给a,剩下的给qqq
arr .sort(qq) // 排好的数组
function fn (f){
f&&f(111,222) // f若存在,就让f执行;f 不存在,就不会看后边的代码
}
fn(qq)// 回调函数 可以暂时理解成把一个函数a传给另外一个函数b,那么我们一般把a成为b的回调函数
arr .filter((item,index)=>{
//item 代表数组中的每一项,index是该项对应的索引
})
var a =[1,2,3]
var f=(item,index)=>{
return item>1
}
a.filter(f)
// 返回值是由回调函数执行返回true的那些项组成的新数组
var a = [{Select:rrue},{Select:rrue},{Select:rrue},{Select:rrue}]
arr .forEach(item,index=> {
});
var res1=arr.forEach((item,index)=>{
// item代表数据中的每一项,index是该项对应的索引
})
// replace split slice subString includes indexOf
// toUpperCase toLowerCase chaAt codeAt
// 字符串的所有方法都不会改变原有字符串
console.log();
// 查看每个字母有多少个
var str = 'hjghffghgj';
var obj ={};
for (var i=0;i<str.length;i++){
// 为了获取字符串中的每一项
var key=str[i]// 代表字符串中的每一个字符
if (obj[key]===undefined){
// 证明这个key是第一次出现
obj[key]=1;
}else{
// 不是第一次出现
obj[key]=obj[key]+1;
// 新次数 =老次数+1
}
}
console.log(obj);
// 循环对象 需要使用for in循环;
// 假如 出现次数最多的是0次; 与之对应的字符为''
// 看看谁出现的最多
obj= { q:3, t:5, y:2, a:6, i:3 }
var maxNum = 0,code='';
for(var k in obj){
debugger// 调试程序
if(obj[k]>maxNum){
maxNum = obj[k];
code = k
}
}
// 0到100的和 递归,边界问题
Dom树
<body>
<!-- <div class="box1">
<h2></h2>
<ul>
<li></li>
</ul>
</div>
<div class="box2">
<header>
<span>123</span>
</header>
</div> -->
<div class="box1">
<input type="text"name="hehe">
</div>
<input class="box1"name="hehe">
</body>
</html>
<script>
// 影响布局的 就是回流(重排)回流一定会引起重绘
// 不影响布局的 就是重绘
// document.getElementById()
// [context].getEleementByClassName()// 获取元素集合
// [context] 指的是 获取元素的范围
// [context].getEleementByTagName()
document.querySelectorAll('[name="hehe"]')
let all = document.getElementsByTagName('*')
// 通配 先获取所有的元素,再从这些元素里筛选我们要的目标元素
// 元素 .getAttribute('xxx') 获取元素的行内属性xxx对应的值
function getName( key,value){
let all = document.getElementsByTagName('*')
let res=[];// res创造一个数组,用来存储目标元素
for (let i=0;i<all.length;i++){
all[i].getAttribute(key);
let str=all[i].getAttribute(key);
if(str == value){
// 证明当前这一项是我们想要的
res.push(all [i])
}
}
return res;
}
</script>