JavaScript(四):内置对象--数组对象、字符串对象

一、数组对象

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']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值