1. 对数组的处理
1.1 对数组的处理,变异方法(会改变原始数组)
1.push()
向数组的末尾增加一个或多个元素,可以通过for循环来达到增加多个元素的效果。
2.pop()
删除并返回数组的最后一个元素
let element = arr.pop() //返回最后一个元素
arr //删除最后一个元素后的数组
3.shift()
删除并返回数组的第一个元素
如果数组为空,那么shift()方法不进行任何操作,并返回一个undefined(ps:可以用该方法来判断一个未知长度的数组是否为空)
4.unshift()
向数组的开头增加一个或多个元素
5.splice()
对数组的内容进行删除,增加,替换。
arr.splice(index,howmany,item1,item2...)
index是执行操作的位置,必须
howmany是删除的个数,为0时就是不删除只增加
//样例(通过循环来删除数组里几个特定的元素) let params = ["方案1", "方案2", "方案3", "方案4", "方案5678等等"]; for (let i = 0, len = params.length; i < len; i++) { if ( params[i].methodName === "方案1" || params[i].methodName === "方案2" || params[i].methodName === "方案3" ) { params.splice(i, 1); i--; //因为删除后,数组长度会减1,所以 i 也要减1,才能对应新的数组 } }
6.sort()
用于对数组进行排序,默认升序。
如果不传入参数,默认以字符编码为基准排序,也可以传入一个排序函数进行排序。
//例子: let array = [1, 2, 10, 18, 3, 95, 2, 5]; let arrayNew = array.sort( //升序 function(a, b) { return a - b; } ); let arrayNew = array.sort( //降序 function(a, b) { return b - a; } );
7.reverse()
array.reverse()
用于颠倒数组中的元素,但是不会创建新的数组,会改变原来的数组
1.2 对数组的处理,非变异方法(不会改变原始数组,而是创建一个新的数组,所以需要创建一个新数组去接收)
1.filter()
对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
例子:
let array = [1, 2, 5, 6]; let arrayNew = array.filter(item => item > 2); //如果item大于2,则返回该item到新数组中去 console.log(arrayNew); //5,6
2.concat()
用于连接两个或者多个数组
3.slice()
从已有的数组中返回选定的元素
array.slice(start,end) //start是开始的位置,必须
4.map()
map方法会按照原始数组元素的顺序依次按照方法处理元素并且不会改变原来的数组,也不会对空数组进行检测 (所以要将返回的数组赋值于一个新定义的数组)
例子:
//map有返回值
let array = [1,2,4,5]
let arr = array.map(function(value) {
return value * 2;
});
console.log(arr) //[2,4,8,10]
5.forEach()
forEach也是一种对数组的遍历,与map不同的是,forEach没有返回值;
let array = [1,2,4,5]
let arr = array.forEach((item)=> {
return item * 2;
});
console.log(arr) //undefined
let arr2 = [];
array.forEach((item,index)=>{
arr2.push(item*2)
})
console.log(arr2) //[2,4,8,10]
6.join()
array.join(separator) // separator= "." 分隔符,默认为,
将所有数组元素拼接成字符串
注意:不能处理对象数组const arr1 = [1,2,3,4,5];const arr2 = [{name:'张三'},{age:24}];console.log(arr1.join("")) // 12345console.log(arr2.join("")) // [object Object][object Object]
使用场景:map与push和join配合,可以将多个数组,合并成一个字符串,生成模板字符串
7.reduce()
接收一个函数作为累加器(可做对数组元素的求和或者求积),数组中的每个值(从左到右)开始缩减,最终计算为一个值
例子:
let arry = [1, 25, 85, 36];
let arryNew = arry.reduce(function(total, currentValue, currentIndex, arr) {
return total * currentValue;
});
console.log(arryNew);//76500
total: 必需。初始值, 或者计算结束后的返回值。
currentValue 必需。当前元素
currentIndex 可选。当前元素的索引
arr 可选。当前元素所属的数组对象。
8.toString()
将数组作为字符串返回
注意:使用toString()方法将数组转为字符串时,只能转化数值数组或字符串数组。不能用在对象数组上
const arr1 = [1,2,3,4,5];
const arr2 = [{name:'张三'},{age:24}];
console.log(arr1.toString()) // 1,2,3,4,5
console.log(arr2.toString()) // [object Object],[object Object]
1.3 对数组的数字的检测
1.every()
对数组中的每一项运行给定函数,全部满足条件则返回true
let arr = array.every(value => value > 18)
2.some()
对数组中的每一项运行给定函数,如果有一项满足条件则返回true
3.indexOf()
返回第一个与给定参数相等的数组元素的索引,没有的话返回-1
例子:
let arr = [1,2,3,56,57]
arr.indexOf(1)
4.lastIndexOf()
返回最后一个与给定参数相等的数组元素的索引,没有的话返回-1
5. includes()
检测数组是否包含某个数
[5,6,7,8,24,25,26,27,28,29,30,31,32,33].includes(val)
存在返回true,不存在返回false
6.find()
找出第一个符合条件的数组成员,如果没有符合条件的则返回undefined
[1, 4, -5, 10].find((n) => n < 0)
// -5
7.findIndex()
返回第一个符合条件的数组成员的位置,如果没有符合条件的,则返回-1
2.对字符串的处理
1.indexOf()
可以返回指定字符串值或数字在字符串或数组中首次(第一个)出现的位置,有的话会出现对应的下标,没有的话会返回 -1。
2.split()
把一个字符分割成字符串数组 。非变异方法,不会改变原字符串,所以需创建变量去接收。
array.split(separator,howmany) //separator 必须,字符串或正则表达式,从该参数指定的位置分割 howmany 可选 分割的长度 默认不考虑长度 ","
3.substr()
可在字符串中抽取从start下标开始的指定书目的字符
stringObject.substr(start,length)
start(必需):抽取的字符串的起始下标
length(可选):字串中的字符数,必修是数值
4.replace()
replace("条","行")可将字符串中特定的内容转为自己想要的
但是注意要把修改后的值重新赋值给字段,这样才能通过该字段取得想要的值
aaa = aaa.replace("false", "true");
5.parseInt()
解析一个字符串,返回一个整数 parseInt(msg.totals);
6.parseFloat()
解析一个字符串,返回一个浮点数
7.+
将字符串类型转为Number类型
例子:const obj={
a:'12'
}
console.log(+obj.a) //12(Number类型)
8.toString()
将一个逻辑值转为一个字符串,或者将数值转为一个字符串;
3.处理对象
1.Object.assign()
将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象(属性相同的情况,后面的源对象的属性值会覆盖前面的属性值)
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const source1 = {b : 5 , d : 4};
Object.assign(target, source,source1);
console.log(target); // { a: 1, b: 5, c: 5, d: 4 }
2.Object.create()
将参数对象的属性和方法都加到新对象的原型上去
例子:
var obj = {
a:1,
aa(){
console.log(`this ${this.a} aa ${this.b}`)
}
};
var obj2 = Object.create(obj)
obj2.b = 3;
obj2.aa();
console.log(obj2)
//this 1 aa 3
b: 3
__proto__:
a: 1
aa: ƒ aa()
3.Object.defineProperty()
直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
4.Object.entries()
返回给定对象自身可枚举属性的[key, value]数组(与for...of一起使用)
5.Object.freeze()
冻结对象:其他代码不能删除或更改任何属性
6.Object.isFrozen()
判断对象是否已经冻结
7.Object.keys()
返回对象可枚举属性(返回一个数组)
8.Object.values()
返回对象可枚举的值(返回一个数组)
9.delete
删除对象某个属性
delete a.age;
在vue中,如果删除对象的某个属性也要触发视图更新的话,Vue.delete(target,propertyName/index)
4.校验
1.typeof
用typeof可以来判别数据类型,但只能区分基本类型:
number、string、undefined、boolean、object。
2.Object.prototype.toString.call()
判断某个对象之属于哪种内置类型(可比type多五种类型检测)
分为null、string、boolean、number、undefined、array、function、object、date、math
例子:Object.prototype.toString.call("abc");// "[object String]"
5.定时器
setTimeout()与setInterval()属于回调函数,this指向window,所以需要使用箭头函数使this指向上下文
1.setTimeout()
在指定的毫秒数后调用函数或计算表达式,只执行一次
2.setInterval()
按照指定周期来调用函数,会不停的调用。可返回一个ID(数字),然后通过调用clearInterval( ID ) 方法来取消定时器,或者当窗口关闭的时候,定时器也会自己关闭
var ID = setInterval( ()=>{ this.aaa() },777 )
aaa(){ } //写具体的方法
附:
使用二分法查询数组中的元素
this.binarySearch = function (item,array) {
var low = 0, height= array.length - 1,mid,element;
while (low <= height){
mid = Math.floor((low+height)/2);
element = array[mid];
if(element < item){
low = mid + 1 ;
}else if(element > item){
height = mid - 1;
}else {
return mid;
}
}
return -1;
};
let arr = [1,5,8,6,5,4,8,5,2,3,1];
let arrNew = arr.sort(
function (a,b) {
return a-b;
}
);
console.log('arrNew',arrNew);
console.log(this.binarySearch(1,arrNew));