JS创建数组及数组元素

JavaScript010

JS创建数组及数组元素,第1张

1、字面量的方式创建数组 :

         let arr = ['张三','李四','王五']

        let num = [11,22,33,44];

        console.log(arr) 

         数组的下标从0开始 

 2、构造函数的方式创建数组 

        new Array(size)

        表示数组中可存放的元素总数

        规定了总数 但是添加一个数 总数也会增

        new Array()实例化一个数组对象 

         let arr = new Array(3)

         arr = [1,2,3,4] 

        声明时赋值 :

         let arr = new Array(1,2,3,4,5,6) 

        分别赋值 :

         let arr = new Array(3)

        arr[0] = 'zhangsan'

        arr[1] = 'lisi'

        arr[2] = 'wangwu' ;

 3、通过数组的名称和下标直接访问数组的元素 

         console.log(arr[1]) 

        for(var i in arr){

            console.log(arr[i])} 

  4、属性   length  设置或返回数组中元素的数目 

        let arr = [1,2,3,4,5]

         console.log(arr.length) 

  5、 join( )  把数组的所有元素放入一个字符串,通过一个分隔符进行分隔 

        把数组转成字符串 

        let newstr = arr.join() 

         join()里面没有传任何参数 默认以逗号连接 

         join('') 数字中间没有任何字符拼接

        let newstr = arr.join('+')

         console.log( typeof(newstr) ) 

       console.log(newstr)

   6、 sort()   对数组排序 

         隐式数据类型转换 会字符串类型的转成数字类型进行排序 

        let arr = ['2', '3', '1', '5', '0']

        let newarr = arr.sort() 

         sort方法 会把老数组和新产生的数组都进行排序 

        console.log(arr, newarr) 

       sort()对应多位数排序会出现问题

        let arr = [2,22,3,32,1,12,100]

       sort 给我们提供的解决方法 

         arr.sort(function(a,b){

         从小到大的顺序 

          return a-b 

        从大到小的顺序 

          return b-a})

         console.log(arr)

7、 push()   向数组末尾添加一个或更多元素,并返回新的长度 

         在外面定义的叫全局变量 

        let stu = ['小张','小王','小李']

      console.log(stu) 

    方法里面的叫局部区域 

        function fn(){

   因为stu 是全局的 所以在方法里面 可以获取到

    数组可以添加重复的数据 

    push也可以添加多个数据 

           let a = stu.push('丽丽','倩倩','雯雯')

            console.log(a)

          console.log(stu)}

         定义一个空数组 点击添加按钮 可以在空数组里面添加

        姓名 点击一个添加 可以把数组使用 dw 显示在页面上 

         let arr = []

         function fn(){

             arr.push('xiaoa')

        document.write有个缺陷,用按钮点击的时候

            会把整个页面进行重新绘制,导致页面原来的内容丢失  

           document.write(arr)} }

8、 concat() 合并两个数组 

        对原来的两个数组 没有任何改变,会生成一个拼接好的新数组 

         let arr1 = [1,2,3]

         let arr2 = [4,5,6]

         let arr3 = [7,8,9]

     拼接多个数组 

       let newarr = arr1.concat(arr2).concat(arr3)

      console.log('arr1',arr1)

         console.log('arr2',arr2) 

      console.log('newarr',newarr)

        es6合并数组 要是用扩展运算符 ... 

         等同于 [1,2,3] 把arr1的括号去掉,

        把里面的内容拿出来了 

        let newarr = [...arr1] 

         let newarr = [...arr1,...arr2,...arr3]

         console.log(newarr)

        eg1:定义  三个数组  分别是 三组学生的信息 第一组 姓名 年纪  性别 

        把三个数组 拼接起来 使用两种方式 

        数组中的splice方法 可以对数组进行增删改 

        splice()里面有三个参数,

        第一个参数表示 你要操作的数组元素的索引

        第二个参数表示 你要从你选择的索引开始要删除的个数

        第三个参数表示 你要添加的数组元素

        let arr = ['张三','李四','王五'] 

         删除李四 

        arr.splice(1,1) 

        把王五修改成丽丽 

         arr.splice(2,1,'丽丽') 

        添加 你想在哪里添加就在哪里添加 

        把倩倩放在数组索引为2的位置 因为第二个参数是0 所以王五不会被删除 

         arr.splice(2,0,'倩倩') 

        使用splice在数组的末尾添加 

        arr.splice(3,0,'倩倩') 

        在任意数组末尾的位置进行添加 

        arr.splice(arr.length,0,'倩倩')

        console.log(arr) 

         eg2:写一个数组 里面有姓名 年纪 性别 展示在页面上

         再写三个按钮 点击 可以实现

        数组的末尾添加一个信息 删除年纪  修改性别  点击完成之后

        数组的最终结果使用alert打印出来 

         let arr = ['张三',20,'男']

        document.write(arr)

         function fn(str){

            if(str=='add'){

                 arr.splice(arr.length,0,'奔驰')

                alert(arr)    }

            if(str=='del'){

                 arr.splice(1,1)

              alert(arr)   }

           if(str=='update'){

               arr.splice(1,1,'女')

              alert(arr) } }

         let arr = ['张三','李四','王五'] 

         push在数组的末尾添加一个元素 

         pop 删除数组的最后一个元素

         arr.pop()

        console.log(arr) 

        shift 删除数组的最前面的一个元素 

        arr.shift()

        console.log(arr) 

        unshift 在数组的最前面添加一个数组 

        arr.unshift('丽丽')

        console.log(arr)

Array.of() 的作用是 创建数组

创建数组本来已经有 字面量 Array构造函数 等方法,但由于 Array构造函数 创建数组时有一些怪异的行为,所以 ES6 添加了 Array.of() 来弥补 Array构造函数 的不足。

以上是 Array构造函数 的用法,也是 Array构造函数 的怪异行为。

new Array() 当只传入一个参数时,不能传入负数,也不能传入浮点数。

在使用 new Array 时,一不小心就会创建出稀疏数组。这个动作会产生一些诡异的“空槽”行为,这也是JS数组广为人所诟病的一点。

Array.of() 取代了 Array() 成为数组的推荐函数形式构造器,因为 Array.of() 并没有这个特殊的单一数值型参数值的问题。

Array.of() 总是返回参数值组成的数组。如果没有参数就返回一个空数组。

所以说,Array.of() 的行为比 Array() 更统一。

如果有一个回调函数需要传入的参数封装为数组,而且不能保证传入的值一定不是0或正整数,Array.of()可以完美解决这个问题。

如果需要构建 Array 的子类,并且想要在子类实例中创建和初始化元素。

这里用了reduce方法,这个方法是Array的,这里用 this.reduce 是因为 Calculator 继承了 Array。

Array.reduce的使用方法可以看下面的链接

【JS】遍历数组的常用方法(举例版)

数组的创建方式

1.字面量的形式: var arr=[1,2,3]

1.构造函数: var arr1=new Array()//不常用

Array构造函数有一个很大的缺陷,就是不同的参数,会导致它的行为不一致。

1.单个数值作为参数,参数表示数组的元素个数

可以看到,Array作为构造函数,行为很不一致。因此,不建议使用它生成新数组,直接使用数组字面量是更好的做法。

push/pop/unshift/shift//增加、删除元素 (数组的方法,所以使用时应调用

数组名.方法名())

arr. slice/splice//截取元素

arr.slice() 原数组不发生改变

无参数时,返回原数组,相当于数组的复制。

一个参数时,从参数作为下标的元素截取,至数组结束。

二个参数时,从第一个参数作为下标(索引)的元素开始截取,到第二个参数作为下标的元素结束,但不包括第二个参数作为下标的函数。 (起始元素包含,结尾元素不包含)

多个参数时,前两个参数起效,后边的参数无效。

arr.splice()原数组改变

无参数时,返回空数组。

一个参数时,从参数作为下标的元素截取,至数组结束。

二个参数时,从第一个参数作为下标(索引)的元素开始截取,即表示截取的起始位置,第二个参数表示截取的元素个数。

多个参数时,前两个参数起效,后边的参数从原数组的截取起始位置开始填充,填充到原数组。

reverse/sort//改变元素位置

arr.reverse()//数组翻转(元素位置颠倒)

arr.sort()从小到大排序,但遵循的是字符串的按位比较规则,所以排序结果容易出现异常。

join()//不改变原数组

join() 以指定参数作为连接符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

concat()//拼接数组 不改变原数组

ES5新增数组操作方法

indexOf (item) 返回元素在数组中对应的索引值,找不到的话,返回-1,用以测试元素是否存在于数组中

forEach(function(item,index))遍历数组,没有返回值

map(function(item,index))遍历数组,存在返回值

filter(function(item)) {return item>2} 返回大于2的元素

some返回布尔值,条件部分成立|| arr.some(function(item){return item>2} )

every返回布尔值,条件全部成立&& arr.every(function(item){return item>2} )

reduce (对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。)arr.reduce(function(a,b){return a+b})

toString()和toLocaleString()

功能:将数组的每个元素转化为字符串,并且输出用逗号分隔的字符串列表。功能类似join();

参数:无

输出:字符串

indexOf()和lastIndexOf()

功能:搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1;lastIndexOf为反向搜索。

参数:元素的值,起点索引(可选)

输出:索引值或-1

Array.from()

功能:将两类对象转为真正的数组:类似数组的对象和可遍历的对象

参数:待转换的对象,第二个参数可选,作用类似于数组的map方法,用来对每个元素进行处理,将处理后的值放入返回的数组。

输出:数组

Array.of()

功能:将一组值,转换为数组。

参数:数组元素

输出:数组

copyWithin()

功能:在当前数组内部,将指定位置的成员复制到其他位置,返回变化后的数组。

参数:索引(从该位置开始替换数据);索引(从该位置开始读取数据,默认为0,负值表示倒数);索引(到该位置前停止读取,默认为最大索引)

输出:返回当前替换后的数组。

注意:改变了当前数组

find()和findIndex()

功能:找到第一个符合条件的数组成员。

参数:回调函数,所有数组成员依次执行该函数,直到找到第一个返回值为true的成员。回调函数可以接受三个参数,依次为值,位置,原数组。

输出:find()返回找到的成员;findIndex()返回成员的位置。

fill()

功能:使用给定的值,填充一个数组。

参数:第一个参数为待填充的值,第二和第三参数可选,分别表示填充的起始和结束位置(不包括)。

输出:填充后的数组

entries()、keys()、values()

功能:用于遍历数组,可以用for…of循环进行遍历。区别是keys()是对键名的遍历、values是对键值的遍历、entries()是对键值对的遍历。

参数:无

输出:遍历器对象

includes()

功能:表示某个数组是否包含给定的值

参数:第一个参数必选(待检查的给定值),第二个参数可选,表示搜索的起始位置,默认为0,负数表示倒数的位置。

输出:一个布尔值。

注意:和indexOf的区别,indexOf进行了运算符的强比对,会导致对NaN误判。