JavaScript 数组 函数

2019-08-18  本文已影响0人  Qingelin

1、标准库函数:

  Object()、String()、Boolean()、Number()、Array()、Function();每一个对象有各自的属性和方法;
  标准库函数总结: 
  基本类型的构造函数:如果前面不加 new 关键字,返回基本类型的值,加 new 关键字会返回 该类型的对象;
  复杂类型的构造函数,加不加 new 关键字结果都一样,返回 对象;

2、Array数组:

1、创建数组方法:

 let arr = ['a','b'] //['a','b']
 let arr = new Array('a','b') //['a','b']

2、数组本质:

原型链上必须有Array.prototype这个属性,js中数组是Array构造出来的对象

3、遍历数组:

VS四种常用遍历数组的方法 https://www.jianshu.com/p/acaddb35c5ed

4、 ForEach遍历数组用法:

1、forEach - 遍历数组

方法一、

   var arr = ['jjj','kkk','hhh']
   arr.forEach(function(a,b,c){
     console.log(a,b,c)
   })
//
  jjj 0 (3) ["jjj", "kkk", "hhh"]
  kkk 1 (3) ["jjj", "kkk", "hhh"]
  hhh 2 (3) ["jjj", "kkk", "hhh"]

方法二、

   arr.forEach( function(a,b){
    console.log(a,b)
})
//
   jjj 0
   kkk 1
   hhh 2

方法三、

   arr.forEach( function(value,key){
    console.log(value,key)
   })
  // 
     jjj 0
     kkk 1
     hhh 2

方法四、

arr.forEach((v,i)=>{
    console.log(v)
    console.log(i)
})
2、sort - 排序

方法一、

    var arr = [1,3,4,5,6,2]
   arr.sort( function(x,y){
    return x-y
   })
   // [1, 2, 3, 4, 5, 6]
   arr.sort( function(x,y){
    return y-x
   })
   // [6, 5, 4, 3, 2, 1]

方法二、

    var arr = ['马云','马化腾','李彦宏']
    var sort  = {
       '马云':167.92,
       '马化腾':376,
       '李彦宏':226
    }
   arr.sort( function(x,y){
    return sort[x]-sort[y]
   })
    //["马云", "李彦宏", "马化腾"]
    arr.sort( function(x,y){
    return sort[y]-sort[x]
   })
   // ["马化腾", "李彦宏", "马云"]
3、join - 插入元素
    var arr = [1,2,4]
    arr.join('s')
   // "1s2s4"  变成字符串 
4、concat - 连接数组

一般用法、

    var a1 = [1,3,4,5,6]; 
    var a2 = ['a,','d','s','c'] 
    a1.concat(a2) 
      //[1, 3, 4, 5, 6, "a,", "d", "s", "c"] 
    a2.concat(a1) 
      // ["a,", "d", "s", "c", 1, 3, 4, 5, 6]

特殊用法、

    //利用concat返回新的数组的特性,复制一个数组
    var a1 = [1,3,4,5,6]; 
    var b = a.concat([]) 
    b //[1,3,4,5,6] 
    a === b //false
5、map - 遍历数组
    var arr = [1,2,4,4]
    arr.map( function(value,key){
     return value*2
    })
    // [2, 4, 8, 8]

map属性和forEach的区别:
和forEach一样,唯一不同的是map有返回值,可以返回任何类型值,forEach没有返回值,返回undefined
举例:

    var arr = [1,2,4,4]
    arr.map( function(value,key){
      return value*2
    })
   // [2, 4, 8, 8]
    arr.forEach( function(value,key){
        return value*2
    })
   // undefined
6、filter - 过滤数组

方法一、

    //过滤掉一部分 var a = [1,2,3,4,5,6,7,8,9] 
    a.filter(function(value,key){ //必须传入两个参数 
         return value >= 4 //布尔值ture留下,false去掉 
    }) 
    //[4, 5, 6, 7, 8, 9]

方法二、

    //过滤掉奇数 
    var a = [1,2,3,4,5,6,7,8,9] 
    a.filter(function(value,key){ 
          return value % 2 == 0 //余数等于零 
    }) 
    // [2, 4, 6, 8]

方法三、

    //filter和map一起用 —— 链式操作 ,map返回不一样的数组,filter返回元素数量上的不同 
    var a = [1,2,3,4,5,6,7,8,9] 
    a.filter(function(value,key){ 
          return value % 2 === 0 
    }).map(function(value){ 
          return value * value 
    }) 
      //[4, 16, 36, 64]
7、reduce - 遍历数组

方法一、

    var arr = [1,2,3,4,5,6,7,8,9,10]
    var sum = 0
    arr.reduce( function(sum,n){
    return sum + n
    },0)
    //55

方法二、

    var arr = [1,2,3,4,5,6,7,8,9,10]
    var sum = 0
    arr.reduce((sum,n) => sum + n,0)
    //55
8、乱炖-reduce 代替其它map、filter、

1、代替filter、

    //求偶数
    var arr = [1,2,3,4,5,6,7,8,9,10]
    arr.reduce( function(a,n){
      if(n%2 == 0){
          a.push(n)
      }
      return a
    },[])
    //  [2, 4, 6, 8, 10]

2、代替map、

    //每一个元素变为原来的两倍
    var arr = [1,3,4,5]
    arr.reduce( function(a,n){
      a.push(n*2)
      return a
    },[])
   //  [2, 6, 8, 10]

3、代替map和filter

    //求奇数之和
    var arr = [1,2,3,4,5,6,7,8,9,10]
    arr.reduce( function(sum,n){
      if(n%2 !== 0){
          sum = sum + n
    }
      return sum
    },0)
      // 25

3、Function函数:

1、声明函数

1、关键字声明具名函数:
    function f(input){return undefined}  ///f函数名、input参数,可以有多个、函数体默认返回undefined
2、关键字声明匿名函数
    var f = function(){} //必须赋值给变量
3、关键字声明具名函数赋给变量
    var x = function y(input1,inpu2){}
4、全局对象声明(少用)
    var f = new Function('参数一','参数二','return语句')
5、箭头函数
    fn =(x,y)=> {return x+y} //如果参数只有一个,那么可以省略圆括号;如果return只有一个语句,且不能返回一个对象时可以一起省略花括号和return

2、函数的name属性:

3、函数参数不是变量而是函数的几种情况

1、函数里面传入的参数可以是函数
    function fn(f){
        console.log('参数为函数')
        return undefined
    }
2、函数里面传入的参数可以是函数,使用循环语句
    function fn(f){
    if(typeof f!=='function'){
        console.log('滚')
        return  false
    }else{
        console.log('函数')
        return true
        }
    }

    fn(1)
    // 滚
    // false

    fn(function(){})
    // 函数
    // true
3、函数里面传入的参数可以是函数,并且可以调用这个函数
    function fn(f){
    if(typeof f!=='function'){
        console.log('滚')
        return  false
    }else{
        console.log('接受了这个函数当作参数')
        f.call()
        console.log('并且我调用了它')
        return true
        }
    }

    fn(1)
    // 滚
    // false


       fn(function(){console.log('我被调用了')})
    // 接受了这个函数当作参数
    // 我被调用了
    // 并且我调用了它
    // true
4、函数里面传入的参数可以是函数,并且可以调用这个函数并同时传参给另一个函数
    function fn(f){
        console.log('函数为参数')
        return undefined
    }

    function fn(y){
        y(555)
    }

    fn(function(){
        console.log(arguments)
    })
    //Arguments [555, callee: ƒ, Symbol(Symbol.iterator): ƒ]

4、this 和 arguments

this

      function f(){ 
          console.log(this) 
       } 
        f.call(1) //打印出Number类型的对象1:Number {1} 
        // 但是严格模式下:上面的的代码块会打印出 1 
      function f(){ 
          console.log(this) 
      } 
      f.call() //window 
      //但是严格模式下:上面的代码块会返回undefined

arguments

 function f(){ 
     console.log(arguments) 
     } 
  f.call(undefined,1)    //Arguments [1, callee: ƒ, Symbol(Symbol.iterator): ƒ]

5、作用域scope

6、闭包

如果一个函数使用了它范围外的变量,那么(这个函数和变量)叫做闭包。

    var a = 1
    function f(){
       console.log(a)
    }
上一篇下一篇

猜你喜欢

热点阅读