字符串数组

259 阅读8分钟

数组常用方法

push:向数组的末尾增加一项 返回值是数组的新长度
unshift:向数组开头增加一项 返回值是数组的新长度
pop:删除数组的末尾项 返回值是删除的数组项
shift:删除数组开头项 返回被删除的开头项目
splice:删除数组中的任意项 返回值是被删除的数组项
	删除(两个参数)splice(index,count)
	替换(三个参数)splice(index,count,value)
	插入(多个参数) splice(index,0,插入的项)
slice:截取数组 返回值是截取到的新数组
	两个参数:(startidnex,endindex)包前不包后
	一个参数: 截取到最后
拼接:
concat:把一个数组和另一个数组拼接在一起 返回拼接好的数组
join:把数组中的每一项 按照指定的分隔符拼接成字符串

排序:
reverse:倒序数组 返回值倒序数组 原有数组改变
sort:根据匿名函数进行冒泡排序 b-a倒序 a-b升序;参数时回调函数(a, b) =>a - b/(a, b) =>b-a
    eg:	let arr = [2,10,6,1,4,22,3]
        console.log(arr.sort())   // [1, 10, 2, 22, 3, 4, 6]
        let arr1 = arr.sort((a, b) =>a - b)  
        console.log(arr1)   // [1, 2, 3, 4, 6, 10, 22]

遍历数组:
forEach: 循环遍历数组 参数是一个匿名函数 默认返回为undefined
    arr.forEach(callback) 遍历数组,无return
    callback的参数: value --当前索引的值
    index --索引
    array --原数组 
map:循环遍历数组 参数是一个匿名函数 
    arr.map(callback) 映射数组(遍历数组),有return 返回一个新数组
    callback的参数: value --当前索引的值
    index --索引
    array --原数组 
arr.filter(callback) 过滤数组,返回一个满足要求的数组
    let arr = [1,2,3,4,5]
    let arr1 = arr.filter( (i, v) => i < 3)
	console.log(arr1)    // false
arr.every(callback) 依据判断条件,数组的元素是否全满足,若满足则返回ture
    let arr = [1,2,3,4,5]
    let arr1 = arr.every( (i, v) => i < 3)
arr.some() 依据判断条件,数组的元素是否有一个满足,若有一个满足则返回ture
    let arr = [1,2,3,4,5]
    let arr1 = arr.some( (i, v) => i < 3)
    console.log(arr1)    // true
arr.reduce(callback, initialValue) 迭代数组的所有项,累加器,数组中的每个值(从左到右)合并,最终计算为一个值
&emsp;&emsp;参数: callback: previousValue 必选 --上一次调用回调返回的值,或者是提供的初始值(initialValue)
                  currentValue 必选 --数组中当前被处理的数组项
                  index 可选 --当前数组项在数组中的索引值
                  array 可选 --原数组
&emsp;&emsp;&emsp;&emsp;&emsp;initialValue: 可选 --初始值
&emsp;&emsp;	实行方法:回调函数第一次执行时,preValue 和 curValue 可以是一个值,如果 initialValue 在调用 reduce() 时被提供,那么第一个 		preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;如果initialValue 未被提供,那么preValue 等于数组中的第一个值.
    let arr = [0,1,2,3,4]
    let arr1 = arr.reduce((preValue, curValue) => 
        preValue + curValue
    )
    console.log(arr1)    // 10
arr.reduceRight(callback, initialValue) 与arr.reduce()功能一样,不同的是,reduceRight()从数组的末尾向前将数组中的数组项做累加。


查找索引:
indexOf:返回获取项在数组中的索引,查找某个元素的索引值,若有重复的,则返回第一个查到的索引值若不存在,则返回 -1
lastIndexOf:返回获取项在数组中出现的最后一次索引
arr.find(callback) 找到第一个符合条件的数组成员
    let arr = [1,2,3,4,5,2,4]
    let arr1 = arr.find((value, index, array) =>value > 2)
	console.log(arr1)   // 3
arr.findIndex(callback) 找到第一个符合条件的数组成员的索引值
    let arr = [1,2,3,4,5]
    let arr1 = arr.findIndex((value, index, array) => value > 3)
    console.log(arr1)  // 3
arr.includes() 判断数中是否包含给定的值
    let arr = [1,2,3,4,5]
    let arr1 = arr.includes(2)  
    console.log(arr1)   // ture
    let arr2 = arr.includes(9) 
    console.log(arr2)    // false
    let arr3 = [1,2,3,NaN].includes(NaN)
    console.log(arr3)  // true
    ps:与indexOf()的区别:
    1 indexOf()返回的是数值,而includes()返回的是布尔值
    2 indexOf() 不能判断NaN,返回为-1 ,includes()则可以判断

转化为数组:
Array.from() 将伪数组变成数组,就是只要有length的就可以转成数组。 ---es6
    let str = '12345'
    console.log(Array.from(str))    // ["1", "2", "3", "4", "5"]
    let obj = {0:'a',1:'b',length:2}
    console.log(Array.from(obj))   // ["a", "b"]
Array.of() 将一组值转换成数组,类似于声明数组    ---es6
    let str = '11'
    console.log(Array.of(str))   // ['11']
    等价于
    console.log(new Array('11'))  // ['11']

arr.keys() 遍历数组的键名
    let arr = [1,2,3,4]
    let arr2 = arr.keys()
    for (let key of arr2) {
        console.log(key);   // 0,1,2,3
    }
arr.values() 遍历数组键值
    let arr = [1,2,3,4]
    let arr1 = arr.values()
    for (let val of arr1) {
         console.log(val);   // 1,2,3,4
    }
arr.entries() 遍历数组的键名和键值
    let arr = [1,2,3,4]
    let arr1 = arr.entries()
    for (let e of arr1) {
        console.log(e);   // 1,2,3,4
    }

字符串常用方法

根据索引值查找字符串的值
string.charAt(index)返回给定位置的那个字符值;
    参数:index指的是字符串中某个位置的数字,即字符在字符串中下标;
    返回值:字符串string的第index个索引对应的字符。
    var str = 'abcdefg';
    console.log(str.charAt(3));//d
    
根据字符值查找索引值
string.indexOf(substring,start)从一个字符串搜索指定的子字符串,返回子字符串的位置(没有找到返回-1)。
    参数:
        substring :要在字符串string中检索的子串(可以只有一个值,也可以是多个值的子串)。
        start :一个可选的整数参数,声明了在字符串String中开始检索的位置。它的默认取值是0,从字符串的第一个字符开始检索。
    返回值:
    	在string中的start位置之后,substring第一个值在string中第一次出现的位置。如果没有找到,则返回-1。
        var str = 'abcedcbadefghi';
        //从第5个索引(值为c)开始查找,找不到,返回-1;
        console.log(str.indexOf('dc',5));//-1
        //从str的第一位开始往后查找,返回子串中第一个值d在str中出现的索引位。
        console.log(str.indexOf('dc',0));//4

String.lastIndexOf(start,value ) 从后向前检索一个子字符串;
    参数同上
    返回值:
    	在string中的start位置之前,substring第一个值在string中第一次出现的位置。如果没有找到,则返回-1。
    var str = 'abcedcbadefghi';
    // 此时是从第一位开始往前查找,找不到,返回-1.
    console.log(str.lastIndexOf('ed',0));//-1
    //从str的第11位值g开始往前找,最后一次出现'ed'的位置。		
    console.log(str.lastIndexOf('ed',11));//3
    //从str的第11位值g开始往前找,最后一次出现e的位置。
    console.log(str.lastIndexOf('e',11));//9

String.search( ) 检索与正则表达式相匹配的子串
    参数:
        regexp 要在字符串string中检索的RegExp对象,该对象具有指定的模式。
        如果该参数不是RegExp对象,则首先将它传递给RegExp()构造函数,把它转换成 RegExp对象。
    返回值:
    	string中第一个与regexp相匹配的子串的起始位置。如果没有找到任何匹配的子 串,则返回-1。
    var str = 'abcedcbadefghi';
    console.log(str.search('ed'));//3

string.slice(start, end)截取字符串的方法
    参数:
        start:索引开始的位置。倒着数的话为负数,-1代表最后一位的索引。
        end:索引结束的位置。如果没有,默认截取到最后一位;
    返回值:
    	一个新字符串;
    从start开始(包括start)到end为止(不包括end)的所有字符;
    var str = 'abcedcbadefghi';
    console.log(str.slice(2,5));//ced
    console.log(str);//abcedcbadefghi

string.substr(start, length) 抽取一个子串
    参数:
        start:索引开始的位置。倒着数的话为负数,-1代表最后一位的索引。
        length:子串中的字符数。如果没有指定length,返回的字符串包含从start到结尾的字符。
    返回值:
    	一个新字符串;
    从string的start处(包括start所指的字符)开始的1ength个字符。
    var stringValue = "hello world";  
    alert(stringValue.substr(3)); //"lo world" ; 
    alert(stringValue.substr(3,7)); //"lo worl" 

string.substring(from, to):返回字符串的一个子串
    参数:
        from 一个整数,截取开始的索引位置。
        to 索引结束的位置。如果没有,默认截取到最后一位;
    返回值:
        一个新字符串,其长度为to-from,从from开始(包括from)到to为止(不包括to)的所有字符。
        var stringValue = "hello world";  
        alert(stringValue.substring(3,7)); //"lo w" 

string.replace(regexp, replacement):是查找并替换的操作。
    参数
        regexp:声明了要替换的模式的RegExp对象。如果该参数是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换成RegExp对象。
        replacement:一个字符串,声明的是替换文本或生成替换文本的函数。
    //替换  
    var text = "cat,bat,sat,fat";  
    var result = text.replace("at","ond");  
    alert(result); //"cond,bat,sat,fat"  

string.match(regexp)字符串的遍历查找,找到一个或多个正则表达式的匹配
    返回值:存放匹配的数组.
    var text = "cat,bat,sat,fat";  
    var pattern = /.at/;  
    var matches = text.match(pattern);  
    console.log(matches); //["cat"] 

    var str = 'abcedcbadefghi';
    console.log(str.match())//['']
    console.log(str.match('a'))//['a']  

string.split(delimiter, limit)将字符串分割成字符串数组
    参数:
        delimiter ,必须有!!!字符串或正则表达式,从该参数指定的地方分割string。
        limit ,这个可选的整数指定了返回的数组的最大长度。
        如果设置了该参数,返回的子串不会多于这个参数指定的数字。
        如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
    返回值:
    	一个字符串数组,是通过在delimiter指定的边界处将字符串string分割成子串创建的。返回的数组中的子串不包括delimiter自身。
    注意,String.split()执行的操作与Array.join()执行的操作相反。

将一个字符串进行倒序输出
    var str = 'abcdefg';
    var str3 = str.split('').reverse().join('');
    console.log(str3);//gfedcba