js 数组

 

数组array

  学习一个方法的原则:

  1. 看字面意思  方法是干什么的.
  2. 看参数
  3. 看返回值
  4. concat()

       合并数组

0个或多个参数

返回值 返回新的数组.  (数组中的方法有浅拷贝也有深拷贝)

深拷贝方法

 例子:

  var arr=[2,3];
  var arr1=['hello','world']
  var as=arr.concat(arr1)
   as.push(56)
  console.log(as)

浅拷贝:返回的新的数组,发生改变会影响原来数组的数组,这叫浅拷贝.

深拷贝:返回的新的数字发生改变,原来的数组不会跟着改变,这叫深拷贝.

  1. constructor()

      构造器

指向对象的父类

  1. Copywithin()
  1. Entries() keys()  values() 遍历器 先不说
  2. Every()

   检测数组中的元素是否都满足某个条件,都满足返回true, 有一个不满足返回就是false

参数,第一个是回调函数,第二个是数值对象(改变函数中的this指向)

返回值是truefalse

 

var arr=[12,23,46,8,36,17,19];
//看这个数组中的元素都大于18
var as=arr.every(function(item,index){
     //返回时true保留,返回值是false不保留
     return item>18;
 })
 console.log(as)
  1. Fill()
  2. 使用一个固定值来填充数组,用一个固定的值来替换数组中的元素

    参数 三个参数 第一个参数就是那个固定值(必填项),第二个是开始替换的起始位置,第三个是替换的结束位置

    返回值 返回替换后的新的数组

    不可以拷贝

     

     

     

     

     

     

     

  3. Filter()

  对数组中元素进行过滤,将符合条件的元素保留,并返回构成一个新的数组

  参数 第一个参数是回调函数,第二个是数值对象(用来修改函数中的this指向)

  返回值是过滤后的数组

  深拷贝

  

var arr=[12,23,46,8,36,17,19];
//保留所有大于18的元素
 var as=arr.filter(function(){
     //返回时true保留,返回值是false不保留
     return item>18;
 })
 console.log(arr)

 

 

  1. Find()

    查找符合某个条件的数组元素

    用法跟filter一样

  2. Findindex()

    返回第一个符合条件的数组元素的索引值。

    用法和find一样,就是返回值不一样

     

  3. Flat()

    将多维数组拉平变成一维数组

    参数 默认是1最多只能拉平二维数组,值2最多拉平三维数组,不管嵌套多少层,都拉平,使用关键字infinity

    返回值 返回拉平后的数组

  4. Flatmap()

先对原数组执行map然后再对数组执行flat

  1. 参数 回调函数

    返回值 返回一个新的二维数组

     

     

  2. Foreach()

  数组中的每个元素都执行一次回调函数,没有返回值,改变原数组.

  参数第一个是回调函数 第二个是数值对象(可省略)

没有返回值

浅拷贝

for原理一样

第二个参数可以用来修改函数中的this

 

var arr=[12,23,56]
var as=arr.forEach(function(value,index,a){
console.log(a[0]=45)
})
console.log(arr)
  1. Includes()这是es7新增的方法
  • 判断一个数组中是否包含一个指定的值

    参数 第一个参数是必填的 第二个参数查找的起始位置(默认为0)如果是负数,用数组的length+这个负数得到的数字就是起始查找位置

    返回值 truefalse

  •  

     

  1. Indexof()

    查找数字在数组中出现的位置

    参数 第一个参数必填 就是查找的元素 第二个就是查找的起始位置

    返回值 找到就返回索引 没找到返回-1

     

     

  2. Join()

     将数组中的所有元素放入一个字符串

     参数 一个分隔符 默认是逗号

    

 var arr=[1,2,8,9,10]
var as=arr.join(" ")
console.log(as)//1 2 8 9 10

 

  1. Lastindexof()
  • indexOf()一样,但他是从右向左,都是首次出现的。
  1. Map

  通过函数处理数组的每个元素,并返回处理后的结果,构造一个新的数组,不影响元素组

  俩个参数第一个是函数,第二个是元素值(可省略)

  函数的参数  有三个 第一个是当前元素  第二个是当前元素的索引  第三个是省略

返回的是处理后的新的数组

深拷贝

 

var name='lisi'
console.log(window)
var obj={name:'lisi'}
var arr=[12,56,23]
var as=arr.map(function(value,index){
   console.log(this)//window
    return value+10;
},obj)
// console.log(as)

 

Map第二个参数的作用

  1. 省略或者填nullundefined,函数类的thiswindow
  2. 如果填了,函数了的this就指向这个参数

Var a  将变量存到内存中,有变量提升有作用域。也相当于给window加了个a属性

   A   相当于给window加了个a属性

  1. Pop

在数组的结尾处删除数组中的最后一个元素

参数 没有参数

返回值 被删除的那个元素

  

var arr=[1,2,8,9,10]
var as=arr.pop()
 console.log(as)//10
  1. Push

   在数组的结尾处添加一个新的元素

参数 0个或多个 就是新元素

   返回值 添加元素后新数组的长度

 

var arr=[1,2,8,9,10]
var as=arr.push(7)
 console.log(as)
  1. Reduce

   Reduce

将数组元素计算作为一个值  一般用于迭代

参数  第一个参数是回调函数 第二个参数是初始值(可选)

返回值

   

var arr=[1,2,3,4,5,6,7,8,9,10]//
var as=arr.reduce(function(init,item){
   //init是上一次函数执行后的返回值 默认从第二个开始 此时init是第一个元素
  //如果想让它从第一个元素开始执行reduce添加第二个参数 初始值就是第二个参数
//    console.log(init)
     return init+item;
 })
 console.log(as//55
  1. Reverse
  • 反转数组

    参数

    返回值 反转后的新数组

     

     

  1. Reduceright
  • reduce的用法一致,从右往左迭代,
  1. Shift

删除数组前面第一个元素

返回值删除的那个元素

 

var arr=[1,2,8,9,10]
var as=arr.shift()
 console.log(as)//1
  1. Slice

截取数组

参数 2个参数number 起始位置 结束位置

返回值 截取后的新的数组

深拷贝

 

 var arr=[12,23,34,45,56,67]
   var as=arr.slice(0,8)
   as[0]='hello'
   console.log(as);//(6) ["hello", 23, 34, 45, 56, 67]
  1. Some

   判断数组中的元素 是否有符合条件的,只要有符合的返回就是true,都不符合返回时false

   参数 第一个是回调函数  第二个是数值对象(改变函数中this指向)

   返回值是truefalse

  

var arr=[12,23,46,8,36,17,19];
//看这个数组中的元素都大于18
var as=arr.some(function(item,index){
     //返回时true保留,返回值是false不保留
     return item<18;
 })
 console.log(as)
  1. Sort
  • 排序 靠字母和数字的先后顺序。

    参数

    返回值

     

     

  1. Splice

从数组中添加或删除或更改数组中的元素

参数 第一个参数,起始位置,第二个参数,删除个数,第三类是添加的新元素

返回值  返回删除的元素所构成的新数组

 

   var arr=[12,23,34,45,56,67]
   var as=arr.splice(1,2)
   console.log(arr);//(4) [12, 45, 56, 67]

 

  1. Tolocalestring
  • 用法和join一样。
  1. Tostring

将数组转化为字符串

没有参数

返回值  转换后的字符串

 

var arr=[1,2,8,9,10]
var as=arr.toString()
 console.log(as)//1,2,8,9,10
  1. Unshift

   在数组前面添加新元素

参数  0个或多个

返回值 新数组的长度

  

var arr=[1,2,8,9,10]
var as=arr.unshift("hello")
 console.log(as)//1

 

  1. IsArray() 它是Array这个类身上的方法

 判断一个对象是否是数组

参数 1

返回值 truefalse

 

var arr=[]
var as=Array.IsArray(arr)
 console.log(as)

 

34.from 他是Array类上面的方法

将两类对象变成真数组,一是伪数组,一是可遍历的对象。

伪数组,函数的参数arguments  获取的dom集合。

参数 伪数组

返回值 改变后的真数组

 

 

 

数组中具有拷贝功能的方法

  1. Concat  slice  map  filter

函数中this的指向问题?

  1. 函数调用前面没有.  Fn() 看函数处再谁的作用域下函数就指向谁,一般都是window
  2. 函数调用前面带. .前面的对象是谁,就指向谁。
  3. 只要是定时器里面的this,不管函数前带不带.都指向window

是因为定时器会单独开辟一个线程,跟之间的线程没有关系。

This的特例

Call()

  1. call前面的那个对象必须是函数
  2. 两类参数,第一类是替换前面函数中this的一个对象,第二类是Fn的实参

Fn.call(obj) Fn函数中的this替换成obj然后执行Fn()

Apply()

  1. apply前面的对象必须是函数
  2. 两个参数 第一个是替换Fnthis的对象,第二个是数组,是Fn实参构成的数组
  3. 如果第一个参数传nullundefined,不改变this

案例 找出数组中的最小值?

 

 

Bind() 典型的柯里化函数代表。

  1. bind前面的对象必须是函数
  2. Fn.bind(obj)只替换Fn中的this,但是不执行Fn

 

 

 

posted @ 2019-11-10 19:20  Y413  阅读(168)  评论(0)    收藏  举报