JS数组

作者: 流着万条永远的河 | 来源:发表于2017-09-05 12:30 被阅读0次

基础使用

Array(3,4,5,6)                    //(4) [3,4,5,6]正常写法,麻烦
var arr = [3,4,5,6]                   //字面量写法
console.log(arr.length)        //    4   元素个数,数组的属性,用它可以访问每一位的元素
console.log(arr[0])            // 3
console.log(arr[1])          // 4
console.log(4)              //undefined
arr[4] = 'hello'               //自己添加一位元素
console.log(arr[4])         //'hello'
arr.push('haha')            //数组最后加一位元素
arr.pop()                    //剔除数组的最后一位元素,()里不加东西
console.log(arr)           //[3,4,5,6,'hello','haha']
arr[1] = 1
console.log(arr[1])      //1
arr[100] = 101
arr                          //[3,1,5,6,'hello','haha',undefined*94,101]
arr.length                 // 101

清空数组怎么搞?

arr .length = 0          //[ ]

var arr = [4,5,6]
for(var i=0,i<arr.length;i++) {
        console.log(arr[i])
}                                                     //4        5        6
获取最后一位值:
arr[arr.length-1]                           //6
arr.pop()                             //6      剔除6,然后数组里没有6了
arr.unshift('haha')          // 3 数组第一位上加
arr            //(3)['haha',4,5]
arr.shift()           //"haha"      删除第一位
arr                 //(2) [4,5]

现在就是在开头和结尾新增和删除的操作。任一位置操作呢——
var arr = [4,5,6]
arr.push(8,9,10)              //6
arr                             //(6)[4,5,6,8,9,10]
arr.splice(2,2)          //(2)[6,8]拿掉,括号里第一个2是元素位,第二个2是替换几个元素,第三个是增加0没写,所以是踢掉。
arr                     //(4)[4,5,9,10]
在9后面增加1,2,3:
arr.splice(2,0,1,2,3)              // [ ]拿掉, 在第三个元素那替换,替换掉0个,增加1,2,3
arr                      //(7)[4,5,1,2,3,9,10]结果在9前面加了
所以,应该:
arr.splice(3,0,1,2,3)这个命令。
替换的话就是把0换掉就行了。

这里重点是splice(x,y,z)的用法,x是开始位,y是长度,z是替换内容。还有一个slice,也是把数组的一段截取出来,只不过splice处理好之后,arr本身就变掉了,slice拿出来,arr本身不变,而且slice(x,y)中的参数y意义不一样的,x是开始,y是结束且不包括最后一位y。

var arr = [3,4,5,6]
var arr2 = arr.slice(1,2)
console.log(arr2)                 // 4
arr                       //[3,4,5,6]

还有一个join的用法,把数组的内容连接,拼成字符串。

arr.join('')                       //"3456"
arr.join('haha')                   //"3haha4haha5haha6"
arr.join(',')                          //"3,4,5,6"
arr.join('-')                        //"3-4-5-6"
arr.join(';')                      // "3;4;5;6"

反转reverse:

var arr = [3,5,-1,18,9,27]
undefined
arr.reverse()
(6) [27, 9, 18, -1, 5, 3]
arr
(6) [27, 9, 18, -1, 5, 3]

操作后,修改原数组,本身变化了。
常用操作基本讲完了。

创建

常用字面量,因为简单方便。

var b = [3,4,5]

最后一位最好不要加逗号,有些浏览器处理方式不对,会把逗号当成后面还有个undefined的元素,长度会多出一位。

数组是特殊的对象

对象是由key-value值组成的,数组是位和对应的位元素作用结合的,算是特殊对象了。

var arr = [1,2,3]
undefined
arr
(3) [1, 2, 3]
obj = {0:1,1:2,2:3,length:3}
Object {0: 1, 1: 2, 2: 3, length: 3}

基本就是这个意思了。但是数组还是跟对象不一样的,对象的key值随意,但是数组的位就是规定的位,从0开始,一位一位的。
length可以清空数组,上面讲了,也可以切掉数组:

arr.length = 2
arr
(2) [1,2]

元素的添加和删除

前面有push,pop,shift,unshift。
神器就是splice:开始索引;
删除元素的位移;
插入新元素,可以多个。返回删除的元素组成的数组或空数组。
删除元素位移是0,就是插入,而且是在开始索引的元素前插入。位移不是0,就是替换,而且包括索引元素替换掉。

var a = [1,2,3,4,5]
a.splice(1,0,9,99,999)
[]
a
(8) [1, 9, 99, 999, 2, 3, 4, 5]
a.splice(1,3,8,88,888)
(3) [9, 99, 999]
a
(8) [1, 8, 88, 888, 2, 3, 4, 5]

删除多个,只能一次一次地删,因为每删一次,数组就会改变,length就会变化。

var a = [3,4,-3,-2,-1,5]
for(var i=0 ;i < a.length; i++) {
    if (a[i] < 0 ) {         
          a.splice(i,1)
  } 
}
[-1]
a
(4) [3, 4, -2, 5]

i=0,没变。1时,没变。2时,删除-3,这时候:
i是2,自增下次就是3了。而这时候a=[3,4,-2,-1,5],而且length是5了。再运行:
3<5,a[3]=-1,splice掉。i自增,得4。a =[3,4,-2,5],length=4=i,终止。问题是,如果删除了,a的length就会减一位,所以,需要让这时候的i同步减一位啊。

var a = [3,4,-3,-2,-1,5]
for(var i=0 ;i < a.length; i++) {
    if (a[i] < 0 ) {         
          a.splice(i,1)
          i--
  } 
}
a
(3)[3,4,5]

另外,从后往前是可以的

var a = [3,4,-3,-2,-1,5]
for(var i =a.length-1;i>=0;i-- ) {
      if(a[i]<0){
            a.splice(i,1)
   }
}

5时,是5,自减变4;
4时,是-1,删,自减变3,a=[3,4,-3,-2,5],length=5;
3时,是-2,删,自减变2,a=[3,4,-3,5],length=4;
,,,
这里的意思就是i和length保持同步。

数组拼接

concat:
a.concat(b)返回一个拼接好的新数组,a,b都不会改变。

var a =[1,2,3],b=[4,5,6]
a.concat(b)
(6) [1, 2, 3, 4, 5, 6]
a
(3) [1, 2, 3]
b
(3) [4, 5, 6]

如何用它来克隆呢?-----重点

var c =[].concat(a)
c
(3) [1, 2, 3]
c[0]="haha"
"haha"
c
(3) ["haha", 2, 3]
a
(3) [1, 2, 3]

sort-------经常用的

数组排序用的,数字或字母排序,undefined放最后,对象会调用其toString方法,最终会改变原数组。

var a=[5,4,3,2,1]
a.sort()
(5) [1, 2, 3, 4, 5]
var b =['d','a',8,'w',3,'c']
undefined
b.sort()
(6) [3, 8, "a", "c", "d", "w"]

but:

var a =[7,8,9,10,11]
undefined
a.sort()
(5) [10, 11, 7, 8, 9]

不加参数去sort时,会把元素当成字符串去排序,一个字节一个字节地对比,10就是1和0,11就是1和1,第一位先比较,比较不出来再看第二位。这时候需要sort的比较函数了:

var a =[7,8,9,10,11]
a.sort(function(v1,v2){
    return v1-v2
})
(5) [7, 8, 9, 10, 11]
假如返回值是大于1的,就反转,这个逻辑——
a.sort(function(v1,v2){
    return 1
})
(5) [11, 10, 9, 8, 7]
a.sort(function(v1,v2){
    return 1
})
(5) [7, 8, 9, 10, 11]

传递了两个参数,再赋值给两个参数,做减法,小于0,就两者位置不动,大于就换换位子。

var friends =[{age:3,name:'dog'},{age:2,name:'ccat'},{age:4,name:'bird'}]
friends.sort(function(v1,v2){
  return v1.age - v2.age 
})
(3) [Object, Object, Object]
0: Objectage: 2name: "ccat":
 Object1: Objectage: 3name: "dog": 
Object2: Objectage: 4name: "bird": 
Objectlength: 3__proto__: Array(0)

friends.sort(function(v1,v2){
  return v1.name > v2.name 
})
[{age:4,name:'bird'},{age:2,name:'ccat'},{age:3,name:'dog'}]

相关文章

  • js 数组链接concat,和数组转字符串join,字符串转数

    js 数组链接用concat js 数组转成字符串 js 字符串转数组

  • js数组题目

    js面试题 js数组 一、按要求分割数组 将"js,数组,分类"字符串数组以/分割 for循环累加 join()把...

  • js 数组

    js 中数组的长度发生改变,数组就真的发生改变,快速清空数组就让数组长度为0js 数组的方法

  • JS数组以及数组变换

    有关数组 数组对象——一种特殊的对象JS其实没有数组,只使用对象来模拟数组 典型数组和JS数组的区别 典型数组 元...

  • 数组检测

    检测是否是数组: 数组转字符串: 字符串转换数组: js对象转换成js字符串: js字符串转换成js对象:

  • 概念集合

    JS中的数组和Arrary的区别 js中的数组就是array对象

  • JS 数组

    JS 数组是一种特殊的对象,不是真正的数组,它只##是通过对象来模拟数组。 JS 数组的定义 let arr = ...

  • javaScript的数组

    js中没有数组类型 js 中数组是以内置对象的形式存在 数组定义01 var attr = new Array('...

  • 数组

    数组的定义: js:存储多个相同类型数据 ,有序的数据;php数组 1,:索引数组,同js;声明:$arrName...

  • js笔记

    js数组 删除某个元素 js数组是否含有某个元素 判断value为undefined cookie操作

网友评论

      本文标题:JS数组

      本文链接:https://www.haomeiwen.com/subject/fdsyjxtx.html