1.数组去重的方法
ary.sort(function (a,b) {
return a-b;
});//给ary数组进行升序排列;
//注意:其中i的最大值为ary.length-1,因为存在i+1项;
for(var i=0;i<ary.length-1; i++){
if(ary[i]===ary[i+1]){
ary.splice(i,1);
i--;//防止数组塌陷问题;
}
}
console.log(ary);
- 2)新建一个空数组arr,然后放一个进去,然后遍历ary数组中的元素,用indexOf查找arr中是否存在ary中的元素,如果没有则放在里面;
var arr=ary.slice(0,1);
for(var i=0; i<ary.length; i++){
if(arr.indexOf(ary[i])==-1){
arr.push(ary[i]);
}
}
console.log(arr);
console.log(ary);
- 3)ary中第一项跟后面所有项比较,第二项跟后面所有项比较,相等的删除,注意数组塌陷问题;
console.log(ary);
for(var i=0; i<ary.length; i++){
for(var j=i+1; j<ary.length; j++){
if(ary[i]===ary[j]){
ary.splice(j,1);
j--;//删除j项后,防止j的塌陷;
}
}
}
console.log(ary);
var ary=[1,2,3,3,2,4,65,45,6,7,2,4,45,8,7,0,0];
//需求:把数组中重复的元素删除掉,利用对象的不重名特性;即改变原数组,最终获得的是原数组;
//思路:创建一个空的对象,将数组中元素作为对象的属性名,同时也作为该属性名的属性值,判断该属性是否已赋值,如果已赋值,则不是undefined,如果未赋值则为undefined;
var obj={};
for(var i=0; i<ary.length; i++){
var m=ary[i];
if(obj[m]!=undefined){
/!*判断obj对象中是否存在m属性名的属性值;通过判断属性名的存在与否来查重;此时判断条件不能为obj[m],因为如果m为0,则obj[m]值也为0;返回值均为假,所以如果数组元素为0,是不会被去掉的;*!/
ary.splice(i,1);//在原数组中删除重复项,获得不重复的数组
i--;//防止数组塌陷;
}else{
obj[m]=m;
/*将属性名的值,作为属性值。此处最好方式是给obj[m]赋值为数字1,这样判断条件就可以使用if(obj[m]),如果属性名已被定义则为1,为真,进行删除步骤,如果属性未被定义,则返回undefined,为假,进行定义赋值;*/
}
}
console.log(ary);
var ary=[1,2,3,3,2,4,65,45,6,7,2,4,45,8,7,0,0];
//需求:获得一个由原数组中不重复的元素组成的新数组,并统计重复的次数;最终获得是一个新数组,这个新数组由obj对象中的属性名作为数组元素组成的;
//思路:创建一个空对象,利用对象的不重名特性进行排除,将数组中的元素作为对象属性名进行赋值,通过属性值来统计重复次数;最后再讲对象中的属性名作为数组元素,添加到一个新的数组中,获得该数组;
var obj={};
var arr=[];
for(var i=0; i<ary.length; i++){
var m=ary[i];
//整体思路:将ary数组中的每一项作为属性名添加到obj对象中,重复判断条件,判断该属性的属性值是否存在,如果存在,即重复,不存在即不重复;给其添加属性值,即将属性定义到对象中;
if(obj[m]){//判断obj[m]值是否存在,如果不存在,输出undefined,返回值false,则执行else语句,如果存在则为>=1的数值,数值返回值为true;
obj[m]++;//当m属性名存在时,给属性值加一,用来获得重复次数;
}else{
obj[m]=1;//当属性名第一次添加时,给其赋值为1;
}
}
//通过遍历obj对象,将属性名添加到arr空数组中;进而获取新数组;
for(var att in obj){//for-in循环是一个一个进行循环的,每一次循环一个属性;
console.log(att+":"+obj[att]);
if(Number(att)){
att=Number(att);//obj中的属性名为数字均以字符串形式作为数组元素;利用Number将其转化为数字;
}
arr.push(Number(att));
}
console.log(arr);
- 6)获取对象中的每个属性名及以及每个属性值的方法,以及与数组的转换,NaN与isNaN的使用
<script>
//考点1:获取对象中的属性名,放在数组中,获得对象中的属性值,放在数组中
//考点2:NaN与isNaN的运用在if条件语句中
//if(NaN){语句1}else{语句2}中,执行结果为语句2;if(isNaN(NaN)){语句1}else{语句2}中,执行结果为语句1;
//NaN在正常情况下为假,只能执行else语句,若想让其执行if语句,给其添加isNaN()
var obj={
name:"guobin",
age:18,
sex:"nan",
14:34,
13:36,
15:25,
};//当定义普通对象时,乱序定义,但是当使用时,对象会重新排序,纯数字属性名以升序的形式排在前面,非纯数字在后面;即此时obj={13: 36, 14: 34, 15: 25, name: "guobin", age: 18, sex: "nan"};
var arr=[];
var arr2=[];
for(var att in obj){//for-in循环是一个一个进行循环的,每一次循环一个属性;console.log(att+":"+obj[att]);
/* if(Number(att)){
att=Number(att);
}//此操作目的是将对象的属性中带有数字的字符串转化为数字;即"14"转化为14;*/
arr.push(att);//将对象中的属性名作为数组元素,加入到arr数组最后一项;
arr2.push(obj[att]);//将对象中的属性值作为数组元素,加入到arr2数组最后一项;
}
console.log(arr);//arr的结果为["13", "14", "15", "name", "age", "sex"];即对象属性名中的数字以字符串的形式添加到数组
console.log(arr2);//arr2的结果为[36, 34, 25, "guobin", 18, "nan"];即对象属性值中的数字以数字的形式添加到数组
//注意:在对象中,如果属性名为纯数字,那么他会默认按着升序的顺序排列,所以在用for-in循环遍历时,获取纯数字属性名以升序的形式排在前面,非纯数字在后面;
</script>
- 7)实例:获取对象中的最高分数,并统计分数出现的次数;
var obj={
xiaoming:83,
xiaomei:45,
xiaozhao:89,
qi:98,
tian:98,
huai:89,
mei:34,
hao:45
};
var mass=[];
for(var sort in obj){
mass.push(obj[sort]);
}
mass.sort(function (a,b) {
return b-a;
});
var n=mass[0];
var mn=1;
for(var i=1; i<mass.length; i++){
if(mass[i]===n){
mn++;
}
}
document.write(n+":"+mn);
var obj={
xiaoming:83,
xiaomei:45,
xiaozhao:89,
qi:98,
tian:98,
huai:89,
mei:34,
hao:45
};
var max=0;
var maxcount=0;
for(var attr in obj){
if(obj[attr]>max){
max=obj[attr];
maxcount=1;
}else if(obj[attr]==max){
maxcount++;
}
}
console.log(max);
console.log(maxcount);
2.Math属性及常用的方法
- Math定义: Math无需定义,直接用Math作为对象;
- Math属性:
- Math常用的方法:九个
- Math.random(): 随机数获取,0<=m<1区间的随机数;
- 获得[n,m]之间的随机整数公式:Math.round(Math.random()*(m-n)+n);
- Math.round(X):四舍五入,返回与X最接近的整数;
- 若X与两侧整数同等接近,则结果接近正无穷的数值,即-4.5四舍五入为-4;4.5四舍五入为5;
- Math.ceil():向上取整;
- Math.floor():向下取整;
- Math.abs():取绝对值;
- Math.sqrt(X):开平方,
- Math.pow(2,3):幂次方;2的3次方;
- Math.max():取最大值;
- Math.min():取最小值;
3.字符串常用的方法
- 字符串常用的方法:七种;
- 通过下标查找对应的字符
- charAt(index):通过下标值(index)查找对应字符;
- charCodeAt(index):通过下标值查找对应的字符编码;
- 通过字符找下标值
- indexOf(substring,startpos):从前往后查找;查找字符首次出现的位置,其中substring指的是查找的字符,startpos指的是从哪个位置开始查找,为可选值;
- lastIndexOf(字符):从后往前查找;
- 字符串的截取:
- slice(n,m) 从索引n截取到索引m;不包含m;包前不包后;但是slice可以取负值;
- substr(n,m) 从索引n开始,截取m长度个;m值可以省略,当省略后,从n开始一直截取到最后;
- substring(n,m) 与slice相同,从索引n截取到索引m,不包含m;但是m,n均为非负整数;m值也可以省略,当省略后,从n开始一直截取到最后;
- 字符串转换数组
- split(separator,limit):字符串转换为新数组,原字符串不会发生改变;
- separator: 分离器,用于分割字符串的字符;即将其转换为逗号;—可以取空字符“”;
- limit:可选参数,即分割几次,数值等于数组元素的个数;
<script>
//需求:将字符串转化为一个对象
var str="name=美好&age=28&sex=男&爱好=音乐";
function str2url(str1){
var obj={};
//1.将字符串切成数组;
var ary=str1.split("&");
//2.遍历数组
for(var i=0; i<ary.length; i++){
//3.数组每一项看做字符串,将其切割为数组;
var ary1=ary[i].split("=");
if(Number(ary1[1])){
ary1[1]=Number(ary1[1]);
}
obj[ary1[0]]=ary1[1];//定义对象的属性名及属性值;
}
return obj;
}
var res=str2url(str);
console.log(res);
</script>
- 字符串转大小写:
- toUpperCase():所有小写的英文字母转大写;
- toLowerCase():所有大写的英文字母转小写;
<script>
//需求1:"yuanmengyuan"变为"Yuanmengyuan"
var str="yuanmengyuan";
var ary=str.split("");
ary[0]=ary[0].toUpperCase();
var str1=ary.join("");
console.log(str1);
//第二种方法
var str="yuanmengyuan";
var str2=str.charAt(0).toUpperCase()+str.substring(1);
console.log(str2);
</script>
- 跟正则配合的字符串方法:
- split();
- match("在字符串中查找内容"): 使匹配,如果存在要查找的内容,则返回一个数组,数组元素有三项,其中第一项为查找到的内容,第二项为对应的索引值,第三项为原始字符串,如果不存在,则返回null;
- replace("被替换的内容","替换的内容"): 不会改变原字符串,返回一个新的字符串;
- search():搜索,找到返回其下标值,找不到返回-1;
4.隐式数据类型分类及比较
- 隐式数据类型分类
- 隐式数据类型比较:
- 转化基础:
- 空数组[]默认通过toString()转化成空的字符串再通过Number转换成0;即[]—》""—》0;
- null==undefined 为真;
- null与数字比较为假,即:null==0为假;但是null+10==10为真;
- undefined+10==NaN;
- false默认转换为0;true默认转换为1;
- 数字与其他类型比较
- 数字==字符串 即:字符串非严格转为数字,如""==0,"123"==123;
- 数字==布尔值 即:布尔值转为数字,其中(false默认为0,true默认为1)如0==false; 1==true;
- 数字==undefined 即:结果为假;
- 数字==对象 即:对象转为数字,[]默认转为0;[12]转为12;如[]==0,[12]==12;均为真;
- 0==![]为真;即当[]添加!后,先执行!,即转换为数字与布尔值的比较,[]为真,![]则为假;变成数字与布尔值的比较,不再是数字与对象的比较;
- 总结:数字与任何基本数据类型或引用数据类型非严格计较,其他类型全部转化为数字,再进行比较;
- 字符串与其他类型比较
- 字符串与布尔值 即:都转为数字,进行比较。如""==false;"1"==true;
- 字符串与对象(数组) 即:都转化为字符串进行比较,如 ""==[];"12"==[12];"12"==["12"]均为真;
- 布尔值与其他类型进行比较
- 布尔值与对象(数组) 即:都转化为数字,再进行比较;如:false==[];false==[0];false==["0"];true==[1];true==["1"]均为真;
- 布尔值与对象比较实例:
[]==![]
,![]添加!后,就变成布尔值,即转化为对象与布尔值的比较,二者全部转化为数字,前者[]转化为数字0;后者![]中[]为对象,为真,加非后为假,false转化为数字为0;所以[]==![]
为真;
- null与undefined比较
- null==undefined为真;
- null与任何其他类型都不等;
- null与数字比较为假,即:null==0为假;但是null+10==10为真;
- undefined与任何其他类型都不等;
- NaN与任何其他类型都不等,跟自身也不相等;
- 对象与对象的比较:即[]==[]为假,因为引用数据是对地址的引用,不同的地址比较,不同;
5.定时器
- setInterval(函数,延迟时间):每隔一段时间间隔就触发一次,触发多次,延迟时间为毫秒;函数是定义阶段;解决其在开始执行时,会出现延迟问题,在执行setInterval之前,让函数先执行一次;
- clearInterval(返回值):返回值为setInterval()的返回值,用于停止;
- setTimeout(函数,延迟时间):仅在指定延迟时间之后触发一次,只触发一次;
- clearTimeout(返回值):返回值为setTimeout()的返回值,用于停止;
<script>
//需求:请封装一个函数,从1弹到5,用setTimeout来实现setInterval的功能;
//考点:1)定时器 2)递归:函数自己调用自己;
var m=1;
function fn() {
alert(m);
m++;
var time=setTimeout(fn,1000);//递归思想,调用函数本身;
if(m>=6){
clearTimeout(time);
}
}
fn();
</script>
- return作用:1)函数返回值;2)阻断程序执行的作用;
var m=1;
function fn() {
alert(m);
m++;
if(m>=6){
clearTimeout(time);
return ;//return作用:阻断程序执行的作用;
}
var time=setTimeout(fn,1000);
}
fn();