数组的常用方法
- 增加,删除和替换:都是影响原始数组
- push()
- pop()
- unshift()
- shift()
- splice()
- splice(1) / splice(1,3) 删除
- splice(2,0,'XXX') 添加
- splice(2,2'XXX','XXX') 替换
- 克隆和拼接
- slice(n,m) 包前不包后
- concat() 数组的拼接
- 翻转和排序
- reverse();
- sort(function(n,m){return n-m});
- 数组转字符串
- toString()
- join()
- eval() 把字符串作为js代码来执;
- 常用但不兼容的方法
- indexOf()
- forEsch()
- map()
Math
- Math.floor()
- Math.ceil()
- Math.abs()
- Math.pow()
- Math.sqrt()
- Math.round()
- Math.max()
- Math.min()
- Math.random()
- 公式: Math.round(Math.random()*(m-n)+n)
数组去重
- 双重循环
<script>
for(var i=0;i<arr.length;i++){
for(var j=i+1; j<ary.length; j++){
if(ary[i]===ary[j]){
ary.splice(j,1);
j--;
}
}
}
</script>
- sort思想
<script>
ary.sort(function (a,b) {
return a-b;
})
for(var i=0; i<ary.length; i++){
if(ary[i]===ary[i+1]){
ary.splice(i,1);
i--; //为了预防数组塌陷
}
}
</script>
- 新数组
<script>
var newAry=[];
for(var i=0; i<ary.length; i++){
if(newAry.indexOf(ary[i])===-1){
newAry.push(ary[i]);
}
}
</script>
- 对象不重名
<script>
var obj={};
for(var i=0; i<ary.length; i++){
var cur=ary[i];
if(obj[cur]){//重复了
ary.splice(i,1);
i--;
}else{
obj[cur]=cur; //赋值;
}
}
</script>
- 对象不重名,记录次数
<script>
var obj={};
for(var i=0; i<ary.length; i++){
var cur=ary[i];
if(obj[cur]){
obj[cur]++;
}else{
obj[cur]=1;
}
}
var ary=[];
for(var attr in obj){
ary.push(Number(attr));
}
</script>
算法
- 快排
<script>
var ary=[3,5,6,3,2,5,2,1];
function quickSort(ary){
if(ary.length <= 1){
return ary;
}
var n = Math.floor(arr.length/2);
var value = ary.splice(n,1)[0];
var left=[],right=[];
for(var i=0;i<ary.length;i++){
var cur = ary[i];
if(cur == ary[i]){
left.push(ary[i]);
}else{
right.push(ary[i]);
}
return quickSort(left).concat([value],quickSort(right));
}
}
var res = quickSort(ary);
</script>
- 插排
<script>
var ary= [25,16,3,1,3,7];
function insertSort(ary){
var left = ary.splice(0,1);
for(var i=0;i<ary.length;i++){
var cur = ary[i];
for(var j<ary.length-1;j>=0;){
if(cur < left[j]){
j--;
if(j == -1){
left.unshift(cur);
break;
}
}else{
left.splice(j+1,0,cur);
break;
}
}
}
}
</script>
- 冒排
<script>
var ary = [2,5,6,8,4,1,4];
function bubbleSort(ary){
for(var i=0;i<ary.length;i++){
for(var j=0;j<ary.length-1-i;j++){
if(ary[j] > ary[j+1]){
var tmp = ary[j];
ary[j] = ary[j+1];
ary[j+1] = tmp;
}
}
}
return ary;
}
var res = bubblueSort()
</script>
字符串常用方法
通过下标找字符串
- charAt():通过下标找字符
- charCodeAt():通过下标找相应字符的unicode编码
通过字符找下标
- indexOf():从前往后找,找到返回相应的字符,找不到返回-1;
- lastIndexOf():从后往前找,找到返回相应的字符,找不到返回-1;
字符串的截取和查找
- slice(n,m)
- subString(n,m)
- slice 和 subString 都是从索引n找到索引m,包前不包后,但是slice支持负值,subString不支持负值
- substr(n,m) 从索引n,截取m个
字符串转数组
- split("切割形式")
字符串转大小写
- toUpperCase() 小转大
- toLowerCase() 大转小
字符串跟正则配合的方法
- replace(要替换的字符/正则,替换成什么/cb的返回值)
- search(查找的字符串 / 正则)
- split(切割形式/正则)
- math(字符串/正则) 可以把捕获到的内容,以数组的形式返回
- 如果捕获到一个,返回的数组有三项: 1)item 2)index 3)input
- 如果捕获到的一堆,把所有捕获到的内容,以数组的形式返回,主要用来配合正则
- math捕获不到的时候,返回null
小题:把str = "zhongguo" 改成 "Zhongguo" 用字符串常用方法来实现
- 思路1: str.slice(0,1).toUpperCase()+str.slice(1)
- 思路2: str.charAt(0).toUpperCase()+str.slice(1)
- 思路3: str=str.replace('z','Z');
i++ 和 ++i
- i++ 先运算后++ 此处的++是本身的++ ,不参与运算
- ++i 先++ 后运算 此处的++参与到运算中
定时器
- 隔一段时间触发一次
- setInterval()
- clearInterval()
- 时间到的时候执行一次
- setTimeout()
- clearTimeout()
日期对象
- 定义一个日期对象 var oDate = new Date();
- 获取现在距离 1970年1月1日 00:00:00的毫秒数 oDate = new getTime()
- 格林尼治时间
- oDate.getFullyear() 年
- oDate.getMonth() + 1 获取月份一定要 + 1
- oDate.getDate() 日
- oDate.getDay() 星期
- oDate.getHours() 小时
- oDate.getMinutes() 分
- oDate.getSeconds() 秒
实战
- 时钟 日期对象+定时器
- 注意:
1)1位数要转成两位数
2)页面一秒钟的空白处理
- 注意:
function toDou(n){
return n>=0 && n<10 ? "0" + n : "" + n;
}
function clock(){
var oDate = new Date();
var y = oDate.getFullYear();
var m = oDate.getMouth()+1;
var d = oDate.getDate();
var H = oDate.getHours();
var M = oDate.getMinutes();
var s = oDate.getSeconds();
var str = y+'-'+toDou(m)+'-'+toDou(d)+' '+toDou(H)+':'+toDou(M)+':'+toDou(S);
document.body.innerHTML=str;
}
- 倒计时
- 设置未来时间 new Date('2018/09/10 18:00:00')
- 求毫秒差
- new Date('2018/10/12 18:00:00')-new Date()
- new Date('2018/10/12 18:00:00').getTime()-new Date().getTime()
- 秒转换:把秒转成天,时,分,秒; 主要用到 % 的思想
- 注意:当秒为负数的时候,需要做处理
<style>
div{
font-size: 30px;
}
div span{
font-size: 50px;
color: #ff0000;
}
div span.close{
color: #cccccc;
}
</style>
<div>距离下课还有 <span>00天 00 : 00 : 00</span></div>
<script>
function toDou(n) {
return n>=0 && n<10? '0'+n:''+n;
}
function countDown() {
var oSpan=document.getElementsByTagName('span')[0];
var timer=null;
var oDate=new Date();
/* var s=Math.floor((new Date('2017/7/12 18:00:00').getTime() - oDate.getTime())/1000);*/
var newDate=new Date('2017/7/12 17:21:30');
var s=Math.floor((newDate-oDate)/1000);
if(s<0){
oSpan.innerHTML='你来晚了,我们已经下课了';
oSpan.className='close';
clearInterval(timer);
return;
}
//24*60*60=86400 秒
var d=Math.floor(s/86400);
s%=86400;;
var h=Math.floor(s/3600);
s%=3600;
var m=Math.floor(s/60);
s%=60;
oSpan.innerHTML=toDou(d)+'天 '+toDou(h)+' : '+toDou(m)+' : '+toDou(s); //字符串拼接
}
countDown();
timer=setInterval(countDown,1000);
</script>
判断
- if...else...
- switch...case...
- 三目 也叫做 三元表达式
- 语法: 条件 ? 执行语句1 : 执行语句2 ;
数组如何转为字符串
- ''+ num
请用setTimeout实现setInterval;比如 0 1 2 3 4 5关闭定时器;
// 111111
var i = 0;
var timer = null;
function callback(){
if(i > 5){
clearTimeout(timer);
return;
}
alert(i);
i++;
timer = setTimeout(callback,1000);
}
callback();
// 22222
var i = 0;
var timer = null;
function callback(){
timer = setTimeout(callback,1000);
if(i >= 5){
clearTimeout(timer);
}
alert(i);
i++;
}
callback();
// 333 --- 蕾蕾姐
var i = 0;
var timer = null
function fn(){
alert(i++);
if(i > 5){
clearTimeout(tiemr);
return;
}
timer = setTimeout(fn,1000);
}
#### 国外的星期1234560,请把这个变成中国的 一二三四五六日;请至少写出3种方法( '0123456'转成'日一二三四五六'
##### 核心思想:都是把数字星期作为索引
// 需求:'0123456'转成'日一二三四五六';
var str='0123456';
var ary=["日","一", "二", "三", "四", "五", "六"];
// 1111
str = str.repelace('0123456','日一二三四五六');
// 2222
str = str.split('').map(function(item,index,input){
return ary[index];
}).join('');
// 3333
str = ary.join('');
// 444
str = str.repelace(/\d/g,function(item,index,input){
return ary[item];
});
### 请把以前用数组展示的随机验证码,改成用字符串展示,并且,里面不能有不兼容的方法
<script>
var str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
// 用数组的方式
/* for循环验证码
function yanZhengMa(str){
var ary = [];
for(var i=0;i<4;i++){
var n = Math.floor(Math.random()*61);
if(ary.indexOf(str[n]) == -1){
ary.push(str[n]);
}else{
i--;
}
}
document.body.innerHTML = ary;
}
setInterval(function(){yanZhengMa(str)},1000);
/
/
function yZMW(str){
var ary = [];
while(ary.length < 4){
var num = Math.round(Math.random()*61);
if(ary.indexOf(str[num]) == -1){
ary.push(str[num]);
}
}
document.body.innerHTML = ary;
}
setInterval(function(){yZMW(str)},1000);
*/
//用字符串的方式
function strYZM(str) {
var ary = '';
while(ary.length < 4){
var num = Math.round(Math.random()*61);
if(ary.indexOf(str.charAt(num)) == -1){
ary = ary + str.charAt(num);
}
document.body.innerHTML = ary;
}
}
setInterval(function(){strYZM(str)},1000);
</script>