字符串的方法
charAt() 查看字符串中位于某一位的字符
conCat() 拼接两个或多个字符串,基本等于"+"
indexOf() 匹配对应字符串的位置,返回的是下标.如果目标不存在,返回-1
lastIndexOf() 匹配字符最后一次出现的位置,返回下标,不存在时返回-1
字符串的截取:
- substring(m,n) 不影响原有字符串
如果只有一个参数,是从这个下标开始,到字符串结束
如果有两个参数,从下标为m开始到下标为n结束,不包括n
- slice(m,n) 不影响原有字符串
如果有一个参数,从这个下标开始到结束
如果有两个参数,从下标为m开始到下标为n结束,不包括n,如果n为负数,意思是从字符串后面开始截取
- substr(m,n)
如果是一个参数,从此下标开始到字符串结束
如果两个参数,第一个视为下标,第二个视为长度,以下标为m开始,截取n个字符
split() 将字符串转换为数组
- 如果参数是""(空字符串),会将字符串中的每一个字符都切割出来
- 如果参数是某个字符,会根据这个字符进行切割
toLowerCase()/toUpperCase()将字符串中所有字符转化为小/大写
trim() 去除字符串两端的空格,不包括字符串中间的空格(IE8-不支持)
replace(old,new) 替换字符,只能替换匹配到的第一个字符
数组的方法
concat() 拼接数组
indexOf() 匹配元素第一次出现在数组中的位置,返回下标.不存在时返回-1
lastIndexOf() 匹配元素最后一次出现在数组中的位置,返回下标,不存在时返回-1
join()将数组转化为字符串
- 有参数:在字符串的字符之间插入该参数
- 无参数:以逗号连接字符
添加项:
* push()在数组的最后位置添加项
* unshift() 在数组的开头位置添加项
* 返回数组长度
删除项:
* pop() 删除数组末尾的一位
* shift() 删除数组第一位
* 返回删除的元素
截取数组:
* slice()
- 一个参数时:slice(m) 从下标为m开始截取到数组结束
- 两个参数时:slice(m,n)从下标为m开始截取到下标n,不包括n,n为负数时从后面数起
* splice()
- 一个参数:splice(m) 从下标m开始到结束
- 两个参数:splice(m,n)从下标m开始截取n长度,会改变原数组
- 如果两个参数之后继续输入参数,会将参数插入到新的数组中
reverse()反转数组
sort() 对数组排序
arr.sort(function(a,b){return b-a}) 降序
arr.sort(function(a,b){return a-b}) 升序
forEach()遍历数组
forEach(function(value,index,array){
console.log(a,b,c)
})
map():将调用的数组的每个元素传递给指定函数,并会返回一个数组,这个返回的数组将会包含每次的return.原数组不会改变
var result = arr.map(function(x){
return x*x;
})
filter()过滤
arr.filter(function(item, index, arr){
})
var result = arr.filter(function(x){
return x!= undefined && x!= null;
})
every()/some()
- every()针对数组中的所有元素,只有所有元素都符合every的条件时,才会返回true
- some()只要数组中有任何一个元素符合它的判断条件,就会返回true.
- 一旦every()和some()确认应返回的值,便会停止遍历(类似正则中的惰性查找,当every遇到某一个值不符合条件,会直接返回false,some遇到某一个值符合条件,直接返回true)
reduce():使用指定函数将数组元素进行组合,最后生成一个单个的值.可以视为"注入"、"折叠".返回值为函数执行完成后的结果
var product = arr.reduce(function(x,y,z,a){
return x*y
})
reduceRight()
- 工作原理和reduce()一样,不同的是它按照数组索引从高到低(从右到左)处理数组。
fill() 填充数组
- 可以用来快速对数组进行初始化
- 用这种方式填充的数据,引用地址都是相同的
arr.fill(value,start,end)
value:要填充的值
start:开始进行填充的下标
end:填充结束的下标(不包含end这个下标)
let arr = [1,2,3,4,5,6,7]
arr.fill(7)
arr.fill(7,2)
arr.fill(7,2,4)
数组去重
一.用for循环和indexof、push去重
function unique(arr){
var arr2 = []
for (let i = 0; i < arr.length; i++){
if(arr2.indexOf(arr[i]) === -1){
arr2.push(arr[i])
}
}
return arr2
}
二.利用ES6的Set方法去重
function unique (arr) {
return Array.from(new Set(arr))
}
[...new Set(arr)]
三.for循环嵌套,splice去重
function unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}
四.sort方法去重
function unique(arr) {
if (!Array.isArray(arr)) {
console.log('type error!')
return;
}
arr = arr.sort()
var arrry= [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i-1]) {
arrry.push(arr[i]);
}
}
return arrry;
}
* 此处用到了sort方法,但默认情况下sort方法比较的是字符串,并且sort方法返回的是排序后的数组,在一些情况下可能并不适用
五.includes方法
function unique(arr) {
var array =[];
for(var i = 0; i < arr.length; i++) {
if( !array.includes( arr[i]) ) {
array.push(arr[i]);
}
}
return array
}
六.filter方法
function unique(arr) {
return arr.filter(function(item, index, arr) {
return arr.indexOf(item, 0) === index;
});
}
七.递归方式
function unique(arr) {
var array= arr;
var len = array.length;
array.sort(function(a,b){
return a - b;
})
function loop(index){
if(index >= 1){
if(array[index] === array[index-1]){
array.splice(index,1);
}
loop(index - 1);
}
}
loop(len-1);
return array;
}
八.利用Map数据结构去重
function arrayNonRepeatfy(arr) {
let map = new Map();
let array = new Array();
for (let i = 0; i < arr.length; i++) {
if(map .has(arr[i])) {
map .set(arr[i], true);
} else {
map .set(arr[i], false);
array .push(arr[i]);
}
}
return array ;
}
九.reduce方法+includes方法
function unique(arr){
return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
总结
- 方法看似很多,其实无非就是两种:
- 两层循环法
- 利用某些语法自身的键的不可重复性