javascript数组,字符串,math常用方法汇总

一.数组是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) // 1
  • Math.ceil():向上取整      Math.ceil(3.2) // 4         Math.ceil(-3.2) // -3
  • Math.floor():向下取整    Math.floor(3.2) // 3            Math.floor(-3.2) // -4
  • Math.max():最大值         Math.max(2, -1, 5) // 5    
  • Math.min():最小值         Math.min(2, -1, 5) // -1
  • Math.pow():指数运算     Math.pow(2, 3) // 8  2³=8
  • Math.sqrt():平方根      Math.sqrt(4) // 2    Math.sqrt(-4) // NaN
  • Math.log():自然对数    Math.log(Math.E) // 1     Math.log(10) // 2.302585092994046
  • Math.exp():e的指数    Math.exp(1) // 2.718281828459045  e²=7.38905609893065
  • Math.round():四舍五入  
  • Math.random():随机数 范围[0,1)   Math.random() // 0.7151307314634323  

三角函数:

  • Math.sin():返回参数的正弦            Math.sin(0) // 0
  • Math.cos():返回参数的余弦            Math.cos(0) // 1
  • Math.tan():返回参数的正切            Math.tan(0) // 0
  • Math.asin():返回参数的反正弦(弧度值)   Math.asin(1) // 1.5707963267948966
  • Math.acos():返回参数的反余弦(弧度值)   Math.acos(1) // 0
  • Math.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)); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值