数组常用方法
- 方法的作用
- 方法的参数
- 方法的返回值
- 原有数组是否改变
push
1
2
3
4
5
6
7
8// 作用:向数组“末尾”追加新的内容
// 参数:追加的内容(可以是一个,也可是多个)
// 返回值:新增后数组的长度
// 原有数组改变
var ary = [12,23,34];
ary.push(100); //=>4 ary:[12,23,24,1000]
ary.push(100,{name:'xxx'}); //=>6
ary:[12,23,34,100,100,{...}]
pop
1
2
3
4
5
6// 作用:删除数组最后一项
// 参数:无
// 返回:被删除的那一项内容
// 原有数组改变
var ary = [12,23,34];
ary.pop() => //34
shift
1
2
3
4
5
6// 作用:删除数组中的第一项
// 参数:无
// 返回:被删除的那一项内容
// 原有数组改变
var ary = [12,23,34];
ary.shfit(); => 12
unshfit
1
2
3
4
5
6
7// 作用:向数组开始位置追加新内容
// 参数:要新增的内容
// 返回:新增后数组的长度
// 原有数组改变
var ary = [12,23,34];
ary.unshfit(100,true) //=>5
// ary => [100,true,12,23,34]
splice
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22基于 SPLICE可以对数组进行很多的操作:删除指定
位置的内容、向数组指定位置增加内容、还可以修改
指定位置的信息
`删除:ary.splice(n,m)`
// 从索引n开始,删除m个内容,把删除的部分以一个新数组返回,原有数组改变
`新增:ary.splice(n,0,x,...)`
// 从索引n开始删除零项(没删除),把X或者更多需要插入的内容存放到数组中索引N的“前面”
`修改:ary.splice(n,m,x,...)`
// 修改的原理就是把原有内容删除掉,然后用新的内容替换这部分信息即可
// 1. 删除数组最后一项
ary.pop()
ary.splice(ary.length-1)
ary.length--
// 2. 向数组末尾追加新内容
ary.push(100)
ary.splice(ary.length,0,100)
ary[ary.length]=100
slice
1
2
3
4
5
6
7
8
9// 作用:在一个数组中,按照条件查找出其中的部分内容
// 参数:两个参数(n/m),从索引n开始,找到索引m处,但是不包含m
// 返回:以一个新数组存储查找的内容原有数组不会变
ary.slice(2,5) // => 得到一个新数组
ary.slice(2) // => 一个参数,就查找到数组末尾
ary.slice(0)
ary.slice()
// 克隆数组
ary.slice(-3,-1) // 支持负数索引 ,数组长度 + 负数索引 => ary.slice(arr.length + (-3),arr.length + (-1))
concat
1
2
3
4
5
6
7// 作用:实现多个数组(或者值)的拼接
// 参数:数组或者值
// 返回:拼接后的新数组
// 原有数组不变
`toString`
作用:把数组转换为字符串
参数:无
join
1
2
3
4// 作用:和toString类似,也是把数组转换为字符串,但是我们可以设置变为字符串后,每一项之间的连接符
// 参数:指定的链接符
// 返回:字符串
// 原有数组不变
reverse
1
2
3
4
5
6
7// 作用:把数组倒过来排列
// 参数:无
// 返回:排列后的新数组
// 原有数组改变
var ary = [12,23,24,45]
ary.reverse()
//ary => [45,24,23,12]
sort
1
2
3
4
5
6
7
8
9
10
11
12
13
14// 作用:给数组排序
// 参数:无/函数
// 返回:排序后的新数组
// 原有数组改变
//=>sort在不传递参数的情况下,只能处理10以内数字排序
var ary=[1,3,2,4,5,6,7,9,8];
ary.sort(); =>[1,2,3,4,5,6,7,8,9]
var ary=[18,1,23,27,2,35,3,56];
ary.sort(); =>[1, 18, 2, 23, 27,
3, 35, 56] 没有按照我们想象中的排序
//=>真实项目中,基于sort排序,我们都需要传递参数
ary.sort(function (a,b){
return a-b;//=>升序 return ba; 降序
});
indexOf / lastIndexOf
1
2
3
4
5
6
7
8
9这两个方法不兼容IE低版本浏览器(IE6~8)
// 作用:检测当前值在数组中第一次或者最后一次出现位置的索引
// 参数:要检测的值
// 返回:索引
// 原有数组不变
//=>验证数组中是否包含某一项
if(ary.indexOf(100)>-1){
//=>ARY中包含100这一项
}
es5/es6
- every
- filter
- find
- forEach
- includes
- keys
- map
- reduce / reduceRight
- some
JS中关于字符串的一些细节知识
1 | // 在JS中所有用单引号或者双引号包起来的都是字符串,每一个字符串是由零到多个字符组成 |
关于字符串中常用的方
字符串是基本数据类型,字符串的每一次操作都是值直接的进行操作,不像数组一样是基于空间地址来操作的,所以不存在原有字符串是否改变这一说,肯定都是不变的
charAt/charCodeAt
- 作用:charAt根据索引获取指定位置的字符,charCodeAt不仅仅获取字符,它获取的是字符对应的Unicode编码值(ASC II码值)。
- 参数:索引
- 返回字符/ 对应的编码
1
2
3
4 var str = 'hello world'
str[0]
str.charAt(0)
str.charCodeAt(0)
indexOf/lastIndexOf
基于这两个方法,可以获取字符在字符串中第一次或者最后一次出现位置的索引,有这个字符,返回大于等于零的索引,不包含这个字符,返回的结果是1,所以可以基于这两个方法,验证当前字符串中是否包含某个字符
1 | var str='zhufeng'; |
slice
作用:str.slice(n,m) 从索引n开始找到索引为m处(不包含m),把找到的字符当做新字符串返回,和数组的slice方法用法相同
subString
和slice语法一模一样,唯一的区别在于:slice支持负数索引,而substring不支持负数索引
substr
也是字符串截取的方法,用法是:str.substr(n,m),从索引n开始截取m个字符
1
2
3 // 支持第一个参数 为负数
var str = 'hello world';
str.substr(-3,3) // => 'rld'
toUpperCase/toLowerCase
实现字母的大小写转换,toUpperCase小写转大写,toLowerCase大写转小写
split
和数组中的join相对应,数组中的join是把数组们一项按照指定的连接符变为字符串,而split是把字符串按照指定的分隔符,拆分成数组中每一项
replace
- 作用:替换字符串中的原有字符
- 参数:原有字符,要替换的新字符
- 返回:替换后的字符串
扩展
- includes
- localeCompare
- search
- trim
时间字符串格式化
有一个时间字符串 “2018-4-4 16:26:8”
,我们想基于这个字符串获取到 “04月04日 16时26分”
1
2
3
4
5
6
7
8
9
10
11
12
13
14 ~function(pro){
pro.formatTime = function(template){
template = template || `{0}年{1}月{2}日{3}时{4}分{5}秒`;
var ary = this.match(/\d+/g); // 获取要格式化时间字符的数字 得到一个数组
template = template.replace(/\{(\d+)\}/g,function(){
// 替换模板
var n = arguments[1],
val = ary[n] || '0';
val < 10 ? val = '0' + val :null;
return val;
})
return template;
}
}(String.prototype)
URL地址问号传参解析
有一个URL地
址“http://www.zhufengpeixun.cn/stu/?
lx=1&name=AA&sex=man” 地址问号后面的内
容是我们需要解析出来的参数信息
{
lx:1,
name:’AA’,
sex:’man’
}
1 | ~function (pro) { |