JavaScript的数组

数组

一、数组是什么?

数组从字面意思来看是数据的集合 其中的数据就是基本数据类型和引用数类型集合就是,把有顺序的放在一个盒子里面。
所以数组就是把一些数据按照顺序放在一个盒子里面 比如:[1,2,“hello”]

1.如何创建一个数组

有两种方法:用字面量或者内置的构造函数来创建一个数组

①. 字面量创建一个数组

var arr = [];
var arr2 = [12"hello"];

②. 内置的构造函数创建一个数组

//如果是一个值并且是number类型,则表示创建一个数组,这个值就是数组的长度
var arr =  new Array();//创建一个空数组
var arr2 = new Array(4);
//如果是多个值或者是一个字符串,则表示创建一个数组,里面就是这几个值
var arr 3 = new Array("4");//创建一个数组,里面有一个元素,就是'4'
var arr4 = new Array(4,2);
2.数组的索引和length

数组里面每个数据都对应一个编号,这个编号就叫做索引,索引是从0开始的。
要注意一点:整个数组其实就是一个整体,一个数组就是一个变量

如果想获取其中某个索引对应的数据,语法则是:数组[索引]
如果想修改其中某个索引对应的数据,语法则是:数组[索引] = 值
如果想获取数组里面有多少(长度)元素,语法则是:数组.length
如果想末尾新增其中某个索引对应的数据,语法则是:数组[数组.length] = 值
数组中第一个数据是:数组[0]
数组中最后一个数据是:数组[数组.length-1]


二、数组的存储

众所周知,数组是一个引用数据类型,而基本数据类型和前者的区别有很大一部分是因为存储上的不同

基本数据类型和引用数据类型在存储上的区别

内存主要是分为栈内存和堆内存
在存储的时候基本数据存在栈内存,引用数据类型则是存储在堆内存。
而且在基本数据类型变量名里面存储的是值,引用数据类型的变量名里面存储的是地址。

基本数据类型和引用数据类型在比较上的区别

基本数据类型比较的是值 引用数据类型比较的是地址

基本数据类型和引用按数据类型在赋值上的区别

基本数据类型在赋值的时候 是把变量里面的值赋值给另一个变量,然后两个变量就没有关系了
引用数据类型在赋值的时候 是把变量里面的地址赋值给另一个变量,然后两个变量就会相互影响了

基本数据类型和引用按数据类型在作为实参时的区别

同基本数据类型和引用按数据类型在赋值上的区别


三、数组的常用方法

数组的方法有很多,很难全部记下来,而且有的方法不会经常使用,还有一定的兼容性。但是下面九种数组的常用方法,需要重点记忆,因为以下方法都没有兼容性

  1. push:末尾添加多个元素

作用:将一个或者多个元素添加到数组的末尾
语法:arr.push(element1,…,elementN)
参数:被添加到数组末尾的元素
返回值:该数组的新长度

  1. unshift:开头添加多个元素

作用:将一个或多个元素添加到数组的开头
语法:arr.unshift(element1, …, elementN)
参数:被添加到数组开头的元素
返回值:该数组的新长度

  1. pop:删除最后一个元素

作用:从数组中删除最后一个元素
语法:arr.pop()
参数:无
返回值:被删除的元素的值

  1. shift:删除第一个元素

作用:从数组中删除第一个元素
语法:arr.shift()
参数:无
返回值:被删除的元素的值

  1. splice:从中间增删改元素

作用:删除或替换现有元素或者原地添加新的元素来修改数组
语法:array.splice(start[, deleteCount[, item1[, item2[, …]]]])
参数:
– start表示从哪个索引开始删除或替换
– deleteCount表示要删除几个元素,如果省略表示删除start后面的所有数据
– item1,…itemN表示替换成的几个元素
返回值:被删除的元素组成的一个数组

  1. reverse:元素位置颠倒

作用:将数组中元素的位置颠倒
语法:arr.reverse()
参数:无
返回值:倒序后的数组

  1. sort:元素排序

作用:将数组元素进行排序
语法:arr.sort()
参数:是一个函数,这个函数是一个排序规则,如果省略,表示按照字符串编码顺序排序
返回值:排序好的数组

  1. concat:合并数组,产生新数组

作用:合并两个或者多个数组
语法:arr.pop()
参数:无
返回值:产生一个新数组

  1. join:元素拼接

作用:把数组里面的元素拼接在一起
语法:arr.join([separator])
参数:separator表示分隔符,不写表示用逗号分隔
返回值:拼接形参的一个字符串


四、ES5数组常用方法

1.forEach:进行数组遍历
        var arr = [1000,2000,3000,4000,3000,5000];
        arr.forEach(function(val,index){
            console.log(val,index);
        })
2.map:进行数组的遍历 返回一个新数组
var arr = [1,2,3,4,5,6,7];
    var result = arr.map(function(value){
        return value*1.5;
    })
    console.log(result)
3.filter 进行数组的遍历 返回一个过滤之后的新数组
        var arr = [1000,2000,3000,4000,3000,5000];
        var result = arr.filter(function(value,index){
            return value>=3000;
        })
        console.log(result)
4.indexOf 用于从前到后查找数组中某一个元素的索引 找到了返回该元素的索引值,反之返回-1
5.lastIndexOf 用于从后到前查找数组中某一个元素的索引 找到了返回该元素的索引值,反之返回-1
        var arr = [1000,2000,3000,4000,3000,5000];
        console.log(arr.indexOf(3000));
        console.log(arr.indexOf(1000));
        console.log(arr.indexOf(1));
        
        console.log(arr.lastIndexOf(3000));
        console.log(arr.lastIndexOf(1000));
        console.log(arr.lastIndexOf(1));
6.扩展:every,some,reduce

every:测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值。空数组返回true
some:测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回一个布尔值。空数组返回false
reduce:对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

        var arr = [1,2,3,4,5];
        var result = arr.every(function(value,index){
            return value>3000;
        })
        console.log(result)
        var result = arr.some(function(value,index){
            return value>3000;
        })
        console.log(result)
        var result = arr.reduce(function(acc,cur){
            return acc+cur;
        })
        console.log(result)

## 五、冒泡排序

冒泡排序是一种非常基础的排序方法,其原理就是从把一个数组中的每一个数从前往后依次进行比较,然后根据大小交换位置,每一轮的比较都确定出一个当轮比较的最大值,最终实现数组的大小排序。下面用js代码实现一下。

1.创建一个乱序的数组

var arr = [1,5,8,6,4,9,2,3,7];

2.然后遍历一个数组,让挨着的两个进行比较

for (var i = 0; i < arr.length-j; i++) {
                if (arr[i] > arr[i + 1]) {
                    var temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }

3.需要进行arr.length次比较,用一个嵌套循环实现,下面是完整代码。

// var num = 0;
        var arr = [1, 5, 8, 6, 4, 9, 2, 3, 7];
        for (var j = 1; j <= arr.length-1; j++) {
            for (var i = 0; i < arr.length-j; i++) {
                // num++;
                if (arr[i] > arr[i + 1]) {
                    var temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        console.log(arr)
        // console.log(num)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值