一、数组对象
1. 判断是否为数组
(1)instanceof运算符
//1. instanceof 运算符可以检测是否为数组
var arr = [];
console.log(arr instanceof Array); //true
var obj = {};
console.log(obj instanceof Array); //false
(2)Array.isArray(参数);
H5新增的语法, IE9以上版本支持
//2. Array.isArray(参数); H5新增的语法, IE9以上版本支持
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(obj)); //false
2. 添加删除数组元素!!!
(1)push:
注意:
1.push可以在数组后面追加新的元素
2.push(参数);参数直接写要添加的数组元素就可以
3.push结束后,返回的是新数组的长度
4.原数组会发生相应的变化
var arr = [4, 5, 6];
arr.push('zzy', 8);
// console.log(arr.push('zzy', 8)); //返回的是数组长度5
console.log(arr); //[4,5,6,'zzy', 8]
(2)unshift:
注意:
1.unshift可以在数组后面追加新的元素
2.unshift(参数);参数直接写要添加的数组元素就可以
3.unshift结束后,返回的是新数组的长度
4.原数组会发生相应的变化
var arr = [4, 5, 6];
arr.unshift('zzy', 8);
// console.log(arr.push('zzy', 8)); //返回的是数组长度5
console.log(arr); //['zzy', 8,4,5,6,]
(3)pop:
1.pop是删除数组的最后一个元素,一次只能删除一个元素
2.pop(),没有参数,直接写就欧了
3.pop完之后返回的结果是删除后的那个元素
4.原数组也会发生变化
var arr = [3, 4, 5, 'zzy'];
console.log(arr.pop()); //zzy
console.log(arr); //[3,4,5]
(4)shift:
1.shift是删除数组的最后一个元素,一次只能删除一个元素
2.shift(),没有参数,直接写就欧了
3.shift完之后返回的结果是删除后的那个元素
4.原数组也会发生变化
var arr = [3, 4, 5, 'zzy'];
console.log(arr.shift()); //3
console.log(arr); //[4, 5, 'zzy']
3. 翻转数组和数组排序
(1)翻转数组:reverse
var arr = [2, 4, 5, 6, 7];
arr.reverse();
console.log(arr); //[7,6,5,4,2]
(2)数组排序(冒泡排序)
var arr = [3, 56, 8, 23, 13, 1];
arr.sort();
console.log(arr); // [1, 13, 23, 3, 56, 8]
但是sort有一些问题,因为它只根据第一位(13的1)来判断的,个位数的话还行
sort排序的完美写法:
var arr = [3, 56, 8, 23, 13, 1];
arr.sort(function (a, b) {
// return a - b; //升序
return b - a; //降序
});
console.log(arr); // [1, 13, 23, 3, 56, 8]
a,b不用管是啥,格式非常固定
4. 数组索引
如果数组里有重复的元素,那么indexOf返回的是它是数组的a[几],laseIndexOf返回的是从后面往前数的a[几];如果不存在,两个都是返回-1。indexOf也可以应用在字符串上,如果比如字符串’abc’,indexOf(‘x’)返回-1,indexOf(‘a’)就返回a的位置0,这里要注意每个字符串都会包含空字符串’',而且索引是0
var arr = ['zzy', 'ht', 'aj', 'qq', 'aj'];
console.log(arr.indexOf('aj')); //2
console.log(arr.lastIndexOf('aj')); //4
console.log(arr.indexOf('wx')); //-1
console.log(arr.lastIndexOf('wx')); //-1
5. 数组去重!!!
把旧数组中不重复的元素取出来,重复的只保留一个,放到新数组中
思路:
1.核心算法:遍历旧数组中的每一个元素,把它们依次放在新数组中,在放的过程中如果元素在新数组中不存在,就添加,否则不添加。
2.如何判断元素存不存在?使用的新数组.indexOf(数组元素),如果返回的是-1,那么就不存在。
function uniqueArr(arr){
var newArr=[];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])==-1)
{
newArr.push(arr[i]);
}
}
return newArr;
}
var result=uniqueArr([1,2,4,1,6,6]);
console.log(result);
6. 数组转换为字符串
var arr=[1,2,3,4];
var newarr=arr.toString();
console.log(newarr);
var arr1=arr.join('|');
console.log(arr1);
二、字符串对象
1.基本包装类型
2.字符串的不可变
里面以前被赋值的数值已经开辟出来一个空间,再赋值不会销毁而且再开辟一块让str去指向。
3.字符串对象里的方法
字符串里的方法都不会改变原来的字符串,和上一个一样,也是开辟新的空间让他去指向。
(1)根据字符返回位置
var str='改革春风吹满地,春风吹又生';
console.log(str.indexOf('春'));//2
// 这时候里面有两个 春,但是它只返回第一个春的位置
// str.indexOf('字符',起始的位置);
var str1=str.indexOf('春',3);
console.log(str1);//8
默认的起始位置是0开始。
案例:查找字符串:abcoefoxyozzopp中所有o出现的次数和位置
var str='abcoefoxyozzopp';
var j=0;
for(var i=0;i<str.length-1;i++){
if(str.indexOf('o',i)!=str.indexOf('o',i-1))
{
j++;
}
if(str.indexOf('o',i)!= -1)
{
console.log(str.indexOf('o',i));
}
}
console.log(j);
没看老师的视频自己敲出来了嗨嗨,我选了j记录有几个o,本来写的如果打印出来不是-1就j++,一看结果是13(除了后两个p后面没有了所以是-1),打印出了前面的所有字符数,就发现在a和b和c的那里,打印出来的都是3,如果前后两个元素的位置数就不一样才说明遇到了o,打印出来位置j再++。
(2)根据位置返回字符!!!
第一个返回的是字符,第二个返回的是ascii码
var str = 'zzy'
console.log(str.charAt(0)); //z
console.log(str.charAt(2)); //y
做游戏的时候可以用来判断用户输入了哪个键,根据键再去操作。
第三个str[index]是h5新增的,就类似于c语言你想打印出来a数组的a[1],直接printf它就行
console.log(str[0]); //z
console.log(str[2]); //y
(3)统计出现次数最多的字符
判断一个字符串abcoefoxyozzopp中出现次数最多的字符,并统计其次数
var obj={
g:0
};
//现在obj[g]就有这个属性,有值
var str='abcoefoxyozzopp';
// obj[chars]=0;
for(var i=0;i<str.length;i++)
{
var chars=str.charAt(i);
// obj[chars]++;
if (obj[chars]) //obj[chars]得到的是属性值,有这个属性就++,没有就为1
{
obj[chars]++;
} else {
obj[chars] = 1;
//这到底是给他存一个属性了还是那个元素的数值为1了呢?
//就像上面我写的g,他里面包括了就有属性有值了
}
}
console.log(obj);
var maxStr=0;
var max=0;
//k是里面的属性名,abcd啥的
//obj[k]得到的是属性值
for(var k in obj)
{
if(obj[k]>max)
{
max=obj[k];
maxStr=k;
}
}
console.log(maxStr);
console.log(max);
这个我有点不会,用object想到了,但是用的不熟,核心思想是用charAt(i)遍历每一个字符。
最开始我想在外层声明里面各个元素个数都是0,里面出现了再去加1,但是那会还没var charts呢,所以用不了。拿到外面来声明的话只能是在写一个for循环,遍历每个字符,再赋值obj[字符]=1,还不如直接用一个for循环,如果这个元素第一次出现的话,他的次数就为1,否则++。
(4)字符串操作方法!!!
var str = 'zzy';
console.log(str.concat('love','ht')); //zzyloveht
var str = '君不见黄河之水天上来';
console.log(str.substr(3, 2)); //黄河
从第几个开始取几个字符,如果第二个不写的话,默认到最后。
(5)替换字符串以及转换为数组
replace方法替换字符串
replace(‘被替换的字符’,‘替换为的字符’);
注意,这种替换只能替换第一个,如果后面再出现,就替换不了了
var str = 'zzy';
console.log(str.replace('z', 'a')); //azy
替换全部:
var str = 'asdarsfzdgdsadqa';
while (str.indexOf('a') !== -1) {
str = str.replace('a', '*');
}
console.log(str);
分割字符串split(‘分隔符’),类似前面的数组转字符串join
var str = 'pink&blue&aoao';
console.log(str.split('&')); //['pink', 'blue', 'aoao']
console.log(str.split('e')); //['pink&blu', '&aoao']