一.数组是js里面非常重要的数据结构,日常工作中避免不了对数组进行各种操作。一下便针对数组做一个整理
array.filter()过滤函数,返回符合条件的item 不会改变原数组
var arr = [1, 2, 3, 3, 2];
var r = arr.filter(function (item, index, self) {
console.log(item); // 依次打印'A', 'B', 'C'
console.log(index); // 依次打印0, 1, 2
console.log(self); // self就是变量arr
return item==2;
});
// console.log(r) [2,2] 返回符合条件的所有元素
array.every() 方法用于检测数组所有元素是否都符合指定条件,所有符合返回true,不符合返回false 不会改变原数组
var arr = [1, 2, 3];
var r = arr.every(function (item, index, self) {
return item>4;
});
//console.log(r) false 数组中所有元素都小于4
array.some() 方法用于检测数组中的元素是否满足指定条件,有一个满足就返回true
var arr = [1, 2, 3];
var r = arr.some(function (item, index, self) {
return item>2; //console.log(r) 由于3满足条件,返回true
});
array.reduce() 方法接收一个函数作为累加器,累加数组的值。
var arr = [1, 2, 3];
var r = arr.reduce(function (total,item, index, self) { //total用来保存累加结果的,初始值为0;
return total+item; // 结果返回6
});
array.map() 方法按照原始数组元素顺序依次处理元素,可返回新数组,但不会改变原数组
var arr = [1, 2, 3];
var r = arr.map(function (item, index, self) {
return item*2; //1,2,3 循环输出数组所有信息,可在此处理业务逻辑
});
console.log(r) //[2, 4, 6]
console.log(arr) //[1, 2, 3]
array.find() 方法用来返回数组中满足条件的第一个元素 不会改变原数组
var arr = [1, 2, 3];
var r = arr.find(function (item, index, self) {
return item>=2;
});
//console.log(r) 2 返回满足条件的第一个元素
array.forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数,可用于遍历数组。
var arr = [1, 2, 3];
arr.forEach(function (item, index, self) { //特别注意forEach返回值为undefined
console.log(item); //1,2,3 循环输出数组所有信息,可在此处理业务逻辑
});
for /for...in 遍历数组
for循环:
var arr = ["Banana", "Orange", "Apple", "Mango"];
for(var i=0,length=arr.length;i<length;i++){
console.log( arr[i]) // Banana Orange Apple Mango
}
//遍历出数组的每一项
for....in:
var arr = ["Banana", "Orange", "Apple"];
for(var index in arr){
console.log(arr[index])//Banana Orange Apple
}
array.indexOf(item,start) 方法可返回某个指定的字符串值在字符串中首次出现的位置。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");//a=2
array.join(separator)将数组按特定分割符组合成字符串(数组=>字符串)
var arr = [1, 2, 3];
arr.join('');//返回"123"
arr.join('a');//返回"1a2a3" 不改变原数组
array.toString()将数组转为字符串,并以逗号隔开(数组=>字符串)
var arr= ["a", "b", "c", "d"];
var arrstring = arr.toString();//arrstring = "a,b,c,d" ,不改变原数组
Array.isArray(obj)判断对象是否是数组
var arr = [1, 2, 3];
var obj= {name:"cgd"};
Array.isArray(arr) //true
Array.isArray(obj) //false
#数组的堆栈操作 删除操作返回删除元素,添加操作返回新的长度,均会改变原数组
var arr = ["a", "b", "c", "d"]; //以下操作单独执行
arr.pop(); //arr 输出为["a", "b", "c"] 删除数组末尾元素
arr.push("e","f") //arr 输出为["a", "b", "c", "d", "e", "f"] 向数组末尾添加元素
arr.shift() //arr 输出为["b", "c", "d"] 删除数组第一个元素
arr.unshift("e","f") //arr 输出为["e","f","a","b", "c", "d"] 向数组开始添加元素
array.concat(arr1) 数组之间连接 arr和arr1连接成一个新的数组,原数组都不变,返回新数组
var arr = ["a", "b", "c", "d"];
var arr1 = ["e", "f", "g", "h"];
var c=arr.concat(arr1) //["a", "b", "c", "d", "e", "f", "g", "h"]
array.splice(index,howmany,item1,…..,itemX) 方法用于插入、删除或替换数组的元素,这种方法会改变原始数组,很强大
index 表示开始位置,
howmany 表示删除多少个必须为数字,可以为0表示不删除,如果不填的话会从index位置删到最后
item1 表示要添加到数组的新元素
var arr= ["a", "b", "c", "d"];
arr.splice(2,1,"e","f"); //["a", "b", "e", "f", "d"] 从位置为2的地方删除一个元素并添加两个元
array.slice(index1,index2) 参数index可正可负,包含arr[index1],不包含arr[index2],原数组都不变,返回截取的新数组
var arr=["a", "b", "c", "d", "e", "f", "g", "h"]
var arrNew=arr.slice(3,-1) //["d", "e", "f", "g", "h"]
var arrNew=arr.slice(1,3) //["b", "c"]
array.reverse() 方法用于颠倒数组中元素的顺序。(元素反转)
var arr = [1, 2, 3];
arr.reverse() // console.log(arr) 输出[3,2,1]
array.sort(sortfunction)对数组进行排序,没传递函数时,按升序排
var arr= [40,100,1,5,25,10];
arr.sort(function(a,b){return a-b}); //升序排列[1,5,10,25,40,100]arr.sort(function(a,b){return b-a}); //降序序排列[100, 40, 25, 10, 5, 1]
拓展:取数组的最大值/最小值
var min = arr[0]; //升序时最小值,逆序时最大值
var max = arr[arr.length - 1]; //升序时最大值,逆序时最小值
通过Math.max.apply(null, arr);Math.min.apply(null, arr);
var arr = [22,13,6,55,30];
var max = Math.max.apply(null, arr); //最大值
var min = Math.min.apply(null, arr);//最小值
通过ES6扩展符
arr = [22,13,6,55,30]; console.log(Math(...arr));
array.valueOf() 返回数组的原始值
var arr= ["a", "b", "c", "d"];
arr.valueOf() //返回原数组,不改变原数组
-
array.fill() 使用一个固定值来填充数组。
var arr=[];
arr.length=3;
arr.fill(2);//[2,2,2]
二.字符串的常用方法:
var str = ‘abcd’
str.charAt(0); //输出下标位置的字符
str.charCodeAt(0);//输出下标位置的字符编码值
str.concat(‘e’); //输出拼接后的字符串
str.indexOf(‘c’); //输出指定字符的下标位置
str.lastIndexOf(‘c’); //从后向前搜索输出指定字符的下标位置
str.length; //输出字符串长度
str.localeCompare(‘efg’); //按照字母表顺序规则比较,输出比较结果,靠前输出1,靠后输出-1,相等输出0
str.search(‘a’); //输出指定字符的下标位置
str.slice(1,5); //输出指定开始下标到结束下标的字符,但不包括结束位置的字符
str.split(‘c’); //输出字符串以指定字符分割为数组
str.substr(0,2); //输出指定下标后面指长度的字符
str.substring(0); //如果没有指定结束位置下标,将输出指定开始下标到最后下标的字符
str.substring(0,3); //输出指定开始下标到结束下标的字符,但不包括结束位置的字符。如果参数为负数,自动转换参数为0。如果第二个参数小于第一个参数,自动调换参数位置
str.toLowerCase(); //输出转换为小写字母的字符
str.toString(); //把其他类型的数据输出为字符串类型的数据
str.toUpperCase(); //输出转换为大写字母的字符
String.fromCharCode(10000); //把Unicode编码转换成对应的文字
str.trim();//去掉字符串的首位空格
字符串去空格:1.正则2.str.trim()
1.replace正则匹配方法
去除字符串内所有的空格:str = str.replace(/\s*/g,"");
去除字符串内两头的空格:str = str.replace(/^\s*|\s*$/g,"");
去除字符串内左侧的空格:str = str.replace(/^\s*/,"");
去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");
2. str.trim() str.trimLeft() str.trimRight();
同时去除空格则使用 str.trimLeft(); //var str_1 = str.trimLeft();
单独去除左侧空格则使用 str.trimLeft(); //var str_1 = str.trimLeft();
单独去除右侧空格则使用 str.trimRight();//var str_1 = str.trimRight();
三.Math的常用方法:
Math.abs()
:绝对值 Math.abs(1) // 1 Math.abs(-1) // 1Math.ceil()
:向上取整 Math.ceil(3.2) // 4 Math.ceil(-3.2) // -3Math.floor()
:向下取整 Math.floor(3.2) // 3 Math.floor(-3.2) // -4Math.max()
:最大值 Math.max(2, -1, 5) // 5Math.min()
:最小值 Math.min(2, -1, 5) // -1Math.pow()
:指数运算 Math.pow(2, 3) // 8 2³=8Math.sqrt()
:平方根 Math.sqrt(4) // 2 Math.sqrt(-4) // NaNMath.log()
:自然对数 Math.log(Math.E) // 1 Math.log(10) // 2.302585092994046Math.exp()
:e的指数 Math.exp(1) // 2.718281828459045 e²=7.38905609893065Math.round()
:四舍五入Math.random()
:随机数 范围[0,1) Math.random() // 0.7151307314634323三角函数:
Math.sin()
:返回参数的正弦 Math.sin(0) // 0Math.cos()
:返回参数的余弦 Math.cos(0) // 1Math.tan()
:返回参数的正切 Math.tan(0) // 0Math.asin()
:返回参数的反正弦(弧度值) Math.asin(1) // 1.5707963267948966Math.acos()
:返回参数的反余弦(弧度值) Math.acos(1) // 0Math.atan()
:返回参数的反正切(弧度值) Math.atan(1) // 0.7853981633974483
Math.max()/Math.min()
取数组的最大值/最小值
方法一:array.sort()排序+数组下标读取
var arr= [40,100,1,5,25,10];
arr.sort(function(a,b){return a-b}); //升序排列[1,5,10,25,40,100]arr.sort(function(a,b){return b-a}); //降序序排列[100, 40, 25, 10, 5, 1]
var min = arr[0]; //升序时最小值,逆序时最大值
var max = arr[arr.length - 1]; //升序时最大值,逆序时最小值
方法二:Math.max()/Math.min()
//Math.max(number);Math.min(number)
//Math.max.apply(null, arr);Math.min.apply(null, arr);
//Math.max(...arr);Math.min(...arr)
注意Math.max()/Math.min()比较的是数字类型number
Math.max(1,6,9,5,8,4,7);//9
Math.min(1,6,9,5,8,4,7);//1
求数组中最大值和最小值:
1.通过Math.max.apply(null/Object, arr);Math.min.apply(null/Object,, arr);
var arr = [22,13,6,55,30];
var max = Math.max.apply(null, arr); //最大值
var max = Math.max.apply(Object, arr); //最大值
var min = Math.min.apply(null, arr);//最小值
2.通过ES6扩展符:Math.max(...arr);Math.min(...arr)
arr = [22,13,6,55,30]; console.log(Math.max(...arr));//55
arr = [22,13,6,55,30]; console.log(Math.min(...arr));//6
Math.random()--随机数,随机整数,随机字符
Math.random()
返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。[0,.1)Math.random() // 0.7151307314634323
任意范围的随机数生成函数如下。
function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min; } getRandomArbitrary(1.5, 6.5) // 2.4942810038223864
任意范围的随机整数生成函数如下。
function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } getRandomInt(1, 6) // 5
返回随机字符的例子如下。
function random_str(length) { var ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; ALPHABET += 'abcdefghijklmnopqrstuvwxyz'; ALPHABET += '0123456789-_'; var str = ''; for (var i=0; i < length; ++i) { var rand = Math.floor(Math.random() * ALPHABET.length);//向下取整,0~ALPHABET.length-1 str += ALPHABET.substring(rand, rand + 1); } return str; } random_str(6) // "NdQKOr"
Math.round
方法用于四舍五入。
Math.round(0.1) // 0 Math.round(0.5) // 1 Math.round(0.6) // 1 // 等同于 Math.floor(x + 0.5)
注意,它对负数的处理(主要是对
0.5
的处理)。Math.round(-1.1) // -1 Math.round(-1.5) // -1 这个地方注意 Math.round(-1.6) // -2
Math.floor()/Math.ceil()
Math.floor
方法接受一个参数,返回小于该参数的最大整数。Math.floor(3.2) // 3
Math.floor(-3.2) // -4
Math.ceil
方法接受一个参数,返回大于该参数的最小整数。Math.ceil(3.2) // 4
Math.ceil(-3.2) // -3
如果需要一个总是返回某个数值整数部分的函数。
function ToInteger(x) { x = Number(x); return x < 0 ? Math.ceil(x) : Math.floor(x); } ToInteger(3.2) // 3 ToInteger(3.5) // 3 ToInteger(3.8) // 3 ToInteger(-3.2) // -3 ToInteger(-3.5) // -3 ToInteger(-3.8) // -3
上面代码中,不管正数或负数,
ToInteger
函数总是返回一个数值的整数部分。
四、常用数组去重
javaScript去重(数组、字符串)
/*数组去重*/ --排序 遍历 arr[i]==arr[i-1]? 删除arr.splice(i,1); function quchong(arr){ var len = arr.length; arr.sort(); //1.排序 for(var i=len-1;i>0;i--){//2.遍历 if(arr[i]==arr[i-1]){ //3.通过当前下标与前一个下标的数组值是否相等 arr.splice(i,1); } } return arr; } var a = ["a","a","b",'b','c','c','a','d']; var b = quchong(a); console.log(b); /*字符串去重*/ --去重 split()转数组 遍历 删除 join()转会字符串 function quchongstr(str){ var a = str.match(/\S+/g);//等价于str.split(/\s+/g)// \s空白符,\S非空白符 a.sort(); for(var i=a.length-1;i>0;i--){ if(a[i]==a[i-1]){ a.splice(i,1); } } return a.join(" "); } var str = quchongstr("a a b a b e"); console.log(str);
数组去重2
function unique(arr){//如果当前数组的第i项已经保存进了临时数组,忽略掉,否则的话把当前项push到临时数组里面
var result = [];
for (var i = 0;i<arr.length;i++){
if(result.indexOf(arr[i]) < 0) { //indexOf 返回元素在result中的位置,如果没有返回-1;
result.push(arr[i]);
}
}
return result;
}
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,null];
console.log(unique(arr));此法的问题:
1.加上indexOf()相当于加载两次循环
2.indexOf()在ie9以下不兼容//数组去重3(ES6 Set)
function unique2(array){ return Array.from(new Set(array)); }