二.屬性操作,圖片切換,短信發(fā)送模擬
2.1 HTML屬性操作
html屬性操作:讀 寫
屬性名
屬性值
屬性讀操作:獲取 找到
元素.屬性名
屬性寫操作: ("添加")替換,修改
元素.屬性名=新的值
oP.innerHTML 讀取元素內(nèi)的所有HTML內(nèi)容
oP.innerHTML=新值 替換元素內(nèi)的所有HTML內(nèi)容
2.2條件判斷
if(條件){
...
}
if(條件){
}else{
...
}
if(條件1){
}else if(條件2...){
}else{
}
2.3 數(shù)組應(yīng)用及實例應(yīng)用
2.8 圖片切換及函數(shù)合并擴(kuò)展模擬短信作業(yè)
三.for應(yīng)用,自動生成,this關(guān)鍵字
3.1 動態(tài)方法:ByTagName()
var oUl=document.getElementById("list") -- 靜態(tài)方法
var aLi=oUl.getElementByTagName("li") -- 動態(tài)方法
document.getElementByTagName("li");
aLi.length
aLi[0]
3.2 ByTagName動態(tài)方法特性
前邊可以放document,也可以用元素
是一堆元素的集合,[]訪問
3.3 初識for循環(huán)
3.4 for循環(huán)執(zhí)行順序
for(var i=0;i<arr.length;i++){
}
3.5 for應(yīng)用:選取 生成 性能
var str="";
for(var i=0;i<100;i++){
str+='<input type="button" value="按鈕" />
}
document.body.innerHTML=str;
//這樣寫生成速度快
3.6 for循環(huán)生成坐標(biāo)
3.7 for循環(huán)遍歷2維數(shù)組,嵌套
3.8 cssText文本格式化與屬性操作
oDiv.onclick=function(){
//oDiv.style.width='200px';
oDiv.style.cssText='width:200px;height:200px;
}
//cssText沒有太大兼容性問題 比較好用 沒有改變原屬性
3.9 綜合實力:生成一組新聞及思路分析
3.10 this指向及this應(yīng)用
this:這個
this:指的是調(diào)用當(dāng)前方法(函數(shù))的那個對象
window是JS老大
四.自定義屬性,索引值
4.1 自定義屬性,自定義一組開關(guān)應(yīng)用
JS可以為任何的html元素添加任意個自定義屬性
for(var i=0;i<arr.length;i++){
arr[i].onOff=true;
arr[i].onclick=function(){
if(this.onOff){
...
this.onOff=false;
}else{
...
this.onOff=true;
}
}
}
4.2 獲取自身遞增數(shù)字及匹配數(shù)組內(nèi)容
var aBtn=document.getElementsByTagName("input");
var arr=['A','B','C','D'];
for(var i=0;i<aBtn.length;i++){
aBtn[i].num=0;
aBtn[i].onclick=function(){
this.value=arr[this.num]
this.num++;
if(this.num===arr.length){
this.num=0;
}
}
}
4.3 添加索引值 匹配數(shù)組 HTML元素
var aBtn=document.getElementsByTagName("input");
for(var i=0;i<aBtn.length;i++){
aBtn[i].index=i;
aBtn[i].onclick=function(){
this.value=this.index;
}
}
4.4 圖片切換綜合實例
4.8 QQ菜單實例2:實現(xiàn)點擊高亮顯示,3道作業(yè)要求
五.JS數(shù)據(jù)類型,類型轉(zhuǎn)換
5.1 JS數(shù)據(jù)類型及相關(guān)操作
js中的數(shù)據(jù)類型 原始類型: Number String Boolean null undefined
引用類型:函數(shù) 對象(obj [] {} )
typeof 判斷數(shù)據(jù)類型
str.charAt() 根據(jù)下標(biāo)獲取子字符串
5.2 數(shù)據(jù)類型轉(zhuǎn)化Number
var a="100";
Number(a);//100
var a="";
Number(a)://0
var a=true;
Number(a);//0
var a=[];
Number(a);//0
var a="w";
Number(a);//NaN
5.3 parsetInt與parsetFloat的區(qū)別
var a="200px"
parsetInt(a)//20
var a="200.332px"
parseFloat(a);//200.332
5.4 Js中稀奇古怪的隱式類型轉(zhuǎn)換
+ - * / %
++ --
><
!
==
5.5 isNaN應(yīng)用實例
一旦程序中出現(xiàn) NaN 肯定是進(jìn)行了非法的運算操作
is Not a Number 不是數(shù)字
isNaN();//true false
5.6 數(shù)據(jù)類型轉(zhuǎn)換所對應(yīng)的小練習(xí)
六.函數(shù)傳參,重用,價格計算
6.1函數(shù)傳參 參數(shù)類型
函數(shù)傳遞參數(shù) 參數(shù)=js的數(shù)據(jù)類型 數(shù)字 字符串 布爾 函數(shù) 對象 未定義
6.2 傳參應(yīng)用 類型判斷及多組
盡量保證HTML代碼結(jié)構(gòu)一致 可以通過父級選取子元素
把核心主程序?qū)崿F(xiàn),用函數(shù)包起來
把每組里不同的值找出來,通過傳參實現(xiàn)
七.作用域,JS預(yù)解析機(jī)制
7.1 js作用域和預(yù)解析機(jī)制
作用域:
域:空間 范圍 區(qū)域
逐行解讀代碼
7.2 全局與局部作用域解析 作用域鏈
由上到下 由內(nèi)到外
- 預(yù)解析:var function 參數(shù)...
function a(){alert(4)}
a=....(未定義)X
遇到重名的:只留下一個
變量和函數(shù)重名了,就只留下函數(shù) - 逐行解讀代碼
表達(dá)式:= + / *...
表達(dá)式可以修改預(yù)解析的值
alert(a);// function a(){alert(4)}
var a=1;
alert(a);//1
function a(){alert(2)}
alert(a);//1
var a=3;
alert(a);//3
function a(){alert(4)}
alert(a);//3
7.3 調(diào)用局部數(shù)據(jù) 全局聲明 for嵌套函數(shù)中i取值
var a=1;
function fun(a){
alert(a);//1
a=2;
}
fun(a);
alert(a);//1
八.運算符,流程控制
運算符流程控制
判斷: if,switch(case break default),? :
循環(huán):while ,for
跳出:break , continue
什么是真,什么是假
真:非零的數(shù)字,字符串,true,函數(shù),Object:[] {}(存在)
假:零,NaN,空字符串,false,null,未定義
var str="css"
switch(str){
case "js" : alert("js");
break;
case "html" : alert("html");
default;
case "css" : alert(str);
}
//三目
alert(12<450?"120<450":"120!<450")
//while循環(huán)
var i=0;
while(i<3){
alert(i);
i++
}
//for循環(huán)
for(var i=0;i<3;i++){
if(i===2){
break;
//continue;
}
alert(i);
}
九.return,定時器基礎(chǔ)
9.1函數(shù)返回值 return詳解應(yīng)用
return返回值 :數(shù)字 字符串 布爾 函數(shù) 對象.......(元素 [] {} null) 未定義----數(shù)據(jù)類型
- 函數(shù)名+括號: fn1()==>return后面的值;
- 所有函數(shù)默認(rèn)返回值:未定義(undefined)
- return 后面的任何代碼都不執(zhí)行了;
9.2 arguments實參集合與局部變量,參數(shù)關(guān)系
arguments是實參 形參可以不要---實參的集合(類數(shù)組集合)
sum(1,2,3);
sum(1,2,3,4);
function sum(){
var n=0;
for(var i=0;i<arguments.length;i++){
n+=argumenst[i];
}
}
9.3 currentStyle與getComputedStyle應(yīng)用
getComputedStyle(element).width/height/.... //獲取計算機(jī)計算后的樣式
background:url() red... 復(fù)合樣式不要獲取 單一樣式不要做判斷
不要有空格 不要獲取未設(shè)置后的樣式: 不兼容
getStyle(,'width');
function getStyle(obj,attr){
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
}
9.4 setInterval詳解,定時器管理,背景選擇實例
定時器:時間概念
setInterval(函數(shù),毫秒);//重復(fù)執(zhí)行
clearInterval(timer) //清除
注意 : 定時器如果是由事件控制的 一定要先關(guān)后開 每次點擊之前先清除一下
9.5 setTimeout詳解,彈窗廣告實例(寫在demo里)
9.6 定時器應(yīng)用-自動切換焦點圖,qq延時菜單實例(寫在demo里)
十.定時器管理,函數(shù)封裝
10.1 定時器管理-開關(guān)設(shè)置
要明白定時器使用規(guī)則 每次定時器執(zhí)行時 要先清除定時器
10.2,10.2 函數(shù)封裝的傳參,判斷處理,正負(fù)值的處理,添加毀掉函數(shù)
div{width:60px;height:60px;background:red;position:absolute;left:0;top:35px;}
<input type="button" value="向前" id="btn1">
<input type="button" value="向后" id="btn2">
<div id="div1"></div>
<script>
/*
* obj 對象
* attr css屬性 方向 寬高云云
* dir 步長
* target 目標(biāo)
* endFn 回調(diào)函數(shù)
* */
var oBtn1=document.getElementById("btn1");
var oBtn2=document.getElementById("btn2");
var oDiv=document.getElementById("div1");
oBtn1.onclick=function(){
doMove(oDiv,"left",10,800,function(){doMove(oDiv,"top",10,500)});
}
oBtn2.onclick=function(){
doMove(oDiv,"left",10,0);
}
function doMove(obj,attr,dir,target,endFn){
dir=parseInt(getStyle(obj,attr))<target?dir:-dir;
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var speed=parseInt(getStyle(obj,attr))+dir;
if(speed>target&&dir>0||speed<target&&dir<0 ){
speed=target;
}
obj.style[attr]=speed+"px";
if(speed===target){
clearInterval(obj.timer);
endFn&&endFn();
}
},50)
}
function getStyle(obj,attr){
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj)[attr];
}
</script>
10.4 doMove應(yīng)用小練習(xí)
引入以上封裝js
window.onload=function(){
var str="";
var len=10;
var aDiv=document.getElementsByTagName("div");
var timer=null;
var num=0;
var onOff=true;
for(var i=0;i<len;i++){
str+='<div style="width:50px;height:50px;background:red;position:absolute;top:0px;left:'+i*60+'px;"></div>'
}
document.body.innerHTML=str;
document.onclick=function(){
clearInterval(timer);
timer=setInterval(function(){
if(onOff){
doMove(aDiv[num],'top',30,500);
num++;
if(num===len){
clearInterval(timer);
onOff=false;
num=0;
}
}else{
doMove(aDiv[num],'top',30,0);
num++;
if(num===10){
clearInterval(timer);
onOff=true;
num=0;
}
}
},200)
}
}
10.5 抖動原理及實現(xiàn)過程
需要引入以上封裝js
img{width:260px;height:auto;display:block;position:absolute;top:100px;left:250px;}
window.onload=function(){
var oImg=document.getElementById("img1");
oImg.onclick=function(){
var pos=parseInt(getStyle(oImg,"left"));
var arr=[];
var timer=null;
var num=0;
for(var i=20;i>0;i-=2){
arr.push(i,-i)
}
arr.push(0);
clearInterval(timer);
timer=setInterval(function(){
oImg.style.left=pos+arr[num]+"px";
num++;
if(num===arr.length){
clearInterval(timer)
}
},50)
}
}
10.6 抖的函數(shù)封裝及隱患,修復(fù)及練習(xí)
img{width:260px;height:auto;display:block;position:absolute;top:100px;left:250px;}
window.onload=function(){
var oImg=document.getElementById("img1");
var onOff=true;
oImg.onmouseover=function(){
shake(oImg,'top')
}
function shake(obj,attr,endFn){
if(onOff){
clearInterval(obj.timer);
onOff=false;
var num=0;
var arr=[];
var pos=parseInt(getStyle(obj,attr));
for(var i=20;i>0;i-=2){
arr.push(i,-i)
}
arr.push(0);
obj.timer=setInterval(function(){
oImg.style[attr]=pos+arr[num]+"px";
num++;
if(num===arr.length){
clearInterval(obj.timer);
endFn&&endFn();
onOff=true;
}
},50)
}
}
}
/*
* 心得:如何在一次事件沒有執(zhí)行完畢之前避免當(dāng)時再次執(zhí)行該事件 找了兩種方法
* 第一種方法:定義一個開關(guān),讓它為true,在true的條件下執(zhí)行事件 執(zhí)行過程中開關(guān)為false 執(zhí)行完畢開關(guān)再變回true
* 第二種方法:定義一個遮罩層,再第一次事件執(zhí)行的時候生成 然后就可以防止再次執(zhí)行事件穿透 第一次事件執(zhí)行完畢遮罩層刪掉云云
*
* */
十一.日期對象,時鐘倒計時
11.1系統(tǒng)時間對象
系統(tǒng)時間對象 new Date() -----當(dāng)前系統(tǒng)的時間對象
getFullYear()
getMonth()
getDate()
getDay()
getHours()
getMinutes()
getSeconds()
方法名 | 描述 |
---|---|
getFullYear() | 返回Date對象"年份"部分的實際數(shù)值 |
getMonth() | 返回Date對象"月份"部分的數(shù)值(0-11) |
getDate() | 返回Date對象"日期"部分?jǐn)?shù)值(1-31) |
getDay() | 返回Date對象"星期"部分的數(shù)值(0-6) |
getHours() | 返回Date對象"小時"部分的數(shù)值(0-23) |
getMinutes() | 返回Date對象"分鐘"部分的數(shù)值(0-59) |
getSeconds() | 返回Date對象"秒"部分的數(shù)值(0-59) |
getMilliseconds() | 返回Date對象"毫秒部分的數(shù)值(0-999)" |
getTime() | 返回Date對象與UTC時間1970年1月1日午夜之間相差的毫秒數(shù) |
getTimezoneOffset() | 返回本地時間與格林威治標(biāo)準(zhǔn)時間(GMT)的分鐘差 |
修改時間信息 | |
setFullYear() | 設(shè)置Date對象中"年份"部分的實際數(shù) |
setMonth() | 設(shè)置Date對象中"月份"部分的數(shù)值(0-11,但不限于) |
setDate() | 設(shè)置Date對象中"日期"部分的數(shù)值(1-31,但不限于) |
setHours() | 設(shè)置Date對象中"小時"部分的數(shù)值(0-23,但不限于) |
setMinutes() | 設(shè)置Date對象中"分鐘"部分的數(shù)值(0-59,但不限于) |
setMilliseconds() | 設(shè)置Date對象中"毫秒"部分的數(shù)值(0-999,但不限于) |
setTime() | 以毫秒值設(shè)置Date對象 |
時間格式轉(zhuǎn)換 | |
toString | 返回Date對象的字符串形式 |
toDateString() | 返回Date對象"日期"部分(年月日)的字符串形式 |
toTimeString() | 返回Date對象"時間"部分(時分秒)的字符串形式 |
toLocaleString() | 基于本地時間格式,返回Date對象的字符串形式 |
toLocalDateString() | 基于本地時間,返回Date對象"日期"部分(年月日)的字符串形式 |
toLocalTimeString() | 基于本地時間格式,返回Date對象"時間"部分(時分秒)的字符串形式 |
toGMTString() | 基于GMT時間格式,返回Date對象的字符串形式 |
toUTCString() | 基于UTC時間格式,返回Date對象的字符串形式 |
11.3 倒計時原理
Date對象參數(shù):
數(shù)字形式: new Date(2017,4,1,9,48,12);
字符串形式: new Date('June 10,2017 12:12:12');
月份取值:January February Match April May June July August September October November December
時間轉(zhuǎn)換公式:
天:Math.floor(t/86400)
時:Math.floor(t%86400/3600)
分:Math.floor(t%86400%3600/60)
秒:t%60
時間戳: getTime()
返回從1970年1月1日0點0分0秒0毫秒
11.4 倒計時實例
function fnTime(){
var iNow=new Date();
var iNew=new Date(2018,0,2,18,0,0);
var t=Math.floor((iNew-iNow)/1000);
var str=Math.floor(t/60/60/24)+"天"+Math.floor(t%86400/3600)+"時"+Math.floor(t%86400/60)+"分"+Math.floor(t%60)+"秒";
document.body.innerHTML="距離下班還有: "+str;
}
fnTime();
setInterval(function(){
fnTime();
},1000)
十二.字符串,查找高亮顯示
12.1 字符串獲取類,封裝檢測數(shù)字的方法
- str.charAt()------對應(yīng)下標(biāo)的內(nèi)容
- str.charCodeAt()------對應(yīng)下標(biāo)內(nèi)容的編碼
- String.fromCharCode(22937)----根據(jù)編碼轉(zhuǎn)換為字
12.2 fromCharCode返回字符串實例,字符串加密
12.3 indexOf,lastIndexOf
- str.indexOf('x',1) ----從左往右找,第一個參數(shù)是一個字符串,默認(rèn)從0開始查找 ,如果有第二個參數(shù)數(shù)字就從數(shù)字指定的位置開始查找 返回-1表示沒找到
- str.lastIndexOf('x')----從右往左找 如果第二個參數(shù)為負(fù)數(shù),默認(rèn)當(dāng)成0來處理
12.4 比較類,截取類,substring應(yīng)用實例
- subString()------默認(rèn)從0開始截取全部,可以檢測兩個數(shù),小的自動放前邊,如果有一個參數(shù)為負(fù)數(shù) 默認(rèn)從0開始
兩個特點:兩個參數(shù)會自動交換位置,所有的負(fù)數(shù)當(dāng)0處理
總而言之,就記著str.subString(x,y)---從x開始截取到y(tǒng)結(jié)束 x<y - str.slice(x,y)---從x開始到y(tǒng)結(jié)束 可以支持負(fù)數(shù)
12.5 大小寫轉(zhuǎn)換,split分割字符串
- str.toUpperCase();------轉(zhuǎn)化為大寫
- str.toLowerCase();------轉(zhuǎn)化為小寫
- str.split('x'); 字符串分割成一個數(shù)組
12.6 split彩色文字效果實例
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{width:300px;height:300px;border:1px solid red;padding:5px;}
span{padding:5px 15px;display:inline-block;margin:5px 0;}
</style>
</head>
<body>
<div id="div"></div>
<input type="text">
<input type="button" value="按鈕">
<script>
var oDiv=document.getElementById("div");
var aInp=document.getElementsByTagName("input");
aInp[1].onclick=function(){
var str=aInp[0].value;
var arr=str.split("");
var color=["#f2a0a1","#c1e4e9","#5b7e91","#eaf4fc"];
for(var i=0;i<arr.length;i++){
arr[i]="<span style='background:"+color[i%color.length]+"'>"+arr[i]+"</span>";
}
oDiv.innerHTML=arr.join("");
}
</script>
</body>
12.7 高亮顯示關(guān)鍵字實例,替換搜索關(guān)鍵字實例
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{border:10px solid #ddd;width:360px;height:200px;background:#ebf6f7;font-size:14px;padding:6px;margin: 5px 0;}
span{background:#ff4;}
</style>
</head>
<body>
<input type="text">
<input type="text">
<input type="button" value="替換">
<div id="div">
老王送孫子上學(xué),路上看到一幫人對著一名環(huán)衛(wèi)工又拍又照的〉踩颍回頭對孫子說:看到?jīng)]蛛砰,不好好學(xué)習(xí)將來和他一樣掃馬路呼畸。 老王送孫子上學(xué)务唐,路上看到一幫人對著一名環(huán)衛(wèi)工又拍又照的≤钋。回頭對孫子說:看到?jīng)]竖配,不好好學(xué)習(xí)將來和他一樣掃馬路何址。 老王送孫子上學(xué),路上看到一幫人對著一名環(huán)衛(wèi)工又拍又照的进胯∮米Γ回頭對孫子說:看到?jīng)],不好好學(xué)習(xí)將來和他一樣掃馬路胁镐。 老王送孫子上學(xué)偎血,路上看到一幫人對著一名環(huán)衛(wèi)工又拍又照的诸衔。回頭對孫子說:看到?jīng)]颇玷,不好好學(xué)習(xí)將來和他一樣掃馬路笨农。 老王送孫子上學(xué),路上看到一幫人對著一名環(huán)衛(wèi)工又拍又照的帖渠≮艘啵回頭對孫子說:看到?jīng)],不好好學(xué)習(xí)將來和他一樣掃馬路阿弃。
</div>
<script>
window.onload=function(){
var div=document.getElementById("div");
var text=div.innerHTML;
var input=document.getElementsByTagName("input");
input[2].onclick=function(){
var str=input[0].value;
var newStr=input[1].value;
if(!str) return;
div.innerHTML=text.split(str).join('<span>'+newStr+'</span>');
}
}
</script>
12.8 字符串方法總結(jié),兩道有趣的課后練習(xí)
var str = '字符串方法總結(jié)字符串方法總結(jié)www.com';
str.charAt(1); // '字'
str.charCodeAt(1); // 21619
String.fromCharCode(22937, 21619); // '妙味'
str.indexOf('m', 4); // 9
str.lastIndexOf('o'); // 16
'1000' < '2' // true
'1000' > 2 // true
str.substring(0, 4); // '字符串方'
str.slice(-3); // 'com'
str.toUpperCase(); // '妙味課堂-WWW.COM'
str.toLowerCase(); // '妙味課堂-www.com'
str.split('.', 2); // [ '字符串方法總結(jié)字符串方法總結(jié)www','com']
十三.JSon,數(shù)組方法,隨機(jī)函數(shù),數(shù)組去重
13.1 json數(shù)據(jù)格式及json語法
var json={name:'leo',age:'32'}
json.name-----leo
var json={name:'leo',age:'32'}
var json={'name':'leo','age':'32'}---安全系數(shù)高
13.2 for in遍歷json語法
for( var attr in json){
console.log(json[attr])
}
13.3 數(shù)據(jù)定義及清空數(shù)據(jù)效率問題
arr.length="";
13.4 數(shù)組4個小寶貝方法與技巧
arr.push("abc")
arr.unshift("abc") ---IE6 7不支持
arr.pop("abc") -----如果不寫任何參數(shù) 默認(rèn)為1
arr.shift("abc") -----如果不寫任何參數(shù) 默認(rèn)為1
一種排隊的方法
var arr=["小喬","大喬","武則天","諸葛亮","阿珂"];
arr.unshift(arr.pop())
13.5 splice方法,數(shù)組去重
//刪除 替換 添加
arr.splice()
第一個參數(shù): 從幾開始
第二個參數(shù): 刪除幾個
之后的參數(shù): 用于替換或添加內(nèi)容 取決于第二個參數(shù) 如果為0 則是添加 否則為替換
13.6 sort排序
arr.sort() ---字符串的比較
arr.sort(function(a,b){return a-b}) ----從小到大
arr.sort(function(a,b){return b-a}) ----從大到小
排序擴(kuò)展實例:
var arrWidth=["345px","58px","90px","1000px"]
arrWidth.sort(function(a,b){
return parseInt(a)-parseInt(b);
})
console.log(arrWidth)//["58px", "90px", "345px", "1000px"]
隨機(jī)排序
arr.sort(function(a,b){
return Math.random()-0.5;
})
13.7 隨機(jī)數(shù)及隨機(jī)公式推理過程
Math.round(Math.random()*(max-min)+min)
13.8 concat,reverse,面試題及練習(xí)
arr.concat()
arr.reverse()
數(shù)組去重splice()方法
var arr=[2,5,6,8,5,3,9,7,5,2,6];
for(var i=0;i<arr.length;i++){
for(var n=i+1;n<arr.length;n++){
if(arr[i]===arr[n]){
arr.splice(n,1);
}
}
}
隨機(jī)產(chǎn)生100個從0-1000之間不重復(fù)的整數(shù)
var n=100;
for(var i=0,str=[];i<n;i++){
str.push(Math.round(Math.random()*n));
if(str.length>1){
for(var a=0;a<str.length;a++){
for( b=a+1;b<str.length-1;b++){
if(str[a]===str[b]){
str.splice(b,1);
n++;
}
}
}
}
}
str=str.join(" | ");
document.body.innerHTML=str;
為數(shù)組編寫indexOf();方法
var arr=[6,9,3,8,7,4,5];
indexOf(arr,5);
function indexOf(arr,elem){
for(var i=0;i<arr.length;i++){
if(arr[i]===elem){
return i;
}
}
return -1;
}
冒泡排序
var arr=[5,26,3,59,18,22,66,37,42,26];
for(var n=1;n<arr.length;n++){
for(var i=0;i<arr.length-n;i++){
if(arr[i]>arr[i+1]){
arr[i]+=arr[i+1];
arr[i+1]=arr[i]-arr[i+1];
arr[i]-=arr[i+1]
}
}
}
console.log(arr)
找最大
var arr=[5,26,3,59,18,22,66,37,42,26];
var max=arr[0];
for(var i=0;i<arr.length-1;i++){
if(max<arr[i+1]){
max=arr[i+1]
}
}
console.log(max)
去掉數(shù)組中重復(fù)的元素(哈希去重),并統(tǒng)計原數(shù)組中每個值出現(xiàn)的次數(shù),輸出出現(xiàn)次數(shù)最多的那個字符和次數(shù)
var arr=[5,26,3,59,18,22,66,37,42,26,3,18,5,5];
var hash={};
for(var i=0;i<arr.length;i++){
if(hash[arr[i]]!==undefined){
hash[arr[i]]++;
}else{
hash[arr[i]]=1;
}
}
console.log(hash);//{3: 2, 5: 3, 18: 2, 22: 1, 26: 2, 37: 1, 42: 1, 59: 1, 66: 1}
arr=[];
var max=maxKey=0;
for(var key in hash){
arr[arr.length]=(key-=0);
if(hash[key]>max){
max=hash[key]
}
if(max===hash[key]){
maxKey=key;
}
}
console.log("輸出次數(shù)最多的數(shù)字是:"+maxKey+" 次數(shù)為: "+max);//輸出次數(shù)最多的數(shù)字是:5 次數(shù)為: 3
console.log(arr);//去重后 :[3, 5, 18, 22, 26, 37, 42, 59, 66]
統(tǒng)計字符串中每個字符出現(xiàn)的次數(shù),并輸出出現(xiàn)次數(shù)最多的那個字符
var str="zheshiyigetebiemeidedifang";
var hash={};
for(var i=0;i<str.length;i++){
if(hash[str[i]]===undefined){
hash[str[i]]=1;
}else{
hash[str[i]]++;
}
}
var max=maxKey=0;
for(var key in hash){
if(hash[key]>max){
max=hash[key];
}
if(max===hash[key]){
maxKey=key;
}
}
console.log(hash)
console.log(max)
console.log(maxKey)