基本数据类型-数组


theme: channing-cyan

基本数据类型

  • Number 数值类型
  • String 字符转类型
  • Boolean 布尔类型 true | false
  • undefined 未定义(声明变量未赋值直接打印)
  • null 空类型

复杂数据类型

  • function 函数
  • Object 对象
  • Array 数组
  • Date日期时间对象
  • Math 数学对象

数组

概念:

存储一系列有序数据的集合(各种数据类型都能存储)

[1,'zhangsan',true,null,arr,obj1]

数组创建方式

//数组创建方式

//字面量方式
var arr = []//构造一个空数组
var arr0 = [1,2,3]//构造一个数组

//构造函数方式
var arr1 = new Array()//构造一个空数组
var arr2 = new Array(3)//构造一个长度为3的数组,一个值代表数组容量
var arr3 = new Array(1,2,3)//构造一个[1,2,3]数组

数组索引号

数组下标就是索引号,在所有语言中索引号都是从0开始的

数组  [1,2,3,4]
索引号 0 1 2 3

数组的长度

数组名.length
arr.length

数组遍历

由于数组长度为length,索引项从0开始,遍历数组可以使用如下循环

for(var i = 0; i < arr.length ; i++){
    document.write(arr[i]+'<br>')
}

练习

<script>
    var arr1 = new Array(98, 87, 95, 89, 77),
        arr2 = new Array(89, 78, 90, 99, 67, 59), //创建数组
        sum = 0, //  求和
        count = 0 //计数器

    //遍历数组
    function getArr(arr) {
        document.write('遍历数组 ')
        for (var i = 0; i < arr1.length; i++) {
            document.write(arr[i] + '&emsp;')
        }
    }
    getArr(arr1)

    //得到总成绩
    function getSum(arr) {
        for (var i = 0; i < arr.length; i++) {
            sum += arr[i]
        }
        return sum
    }
    console.log(getSum(arr1));

    //求大于平均分的成绩
    function getMore(arr) {
        document.write('<br>大于平均分的成绩 :')
        var avg = sum / arr.length
        for (var i = 0; i < arr.length; i++) {
            if (avg < arr[i]) {
                document.write(arr[i] + '&emsp;')
            }
        }
    }
    getMore(arr1)

    //求分数最高成绩
    function getMaxScore(arr) {
        var max = arr[0]
        for (var i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i]
            }
        }
        return max
    }
    console.log(getMaxScore(arr2));

    //求分数最低的成绩
    function getMinScore(arr) {
        var min = arr[0]
        for (var i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i]
            }
        }
        return min
    }
    console.log(getMinScore(arr2));

    // 求不及格成绩并打印输出
    function getFail(arr) {
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < 60) {
                document.write('<br>不及格同学分数为:' + arr[i] + '<br>')
                count++
            }
        }
        document.write('不及格同学人数为:' + count)
    }
    getFail(arr2)
</script>

数组常用方法

  • push  在数组末尾添加元素,可以添加一个,也可以添加多个
var arr = [ 1,2 ]
arr.push(1)//[ 1,2,1 ]
arr.push(3,2)//[ 1,2,3,2 ]
  • pop  删除数组末尾的元素(无参)
var arr = [ 1,2 ]
arr.pop() //arr==>[1]
  • unshift  在数组开始添加元素
var arr = [ 1,2 ]
unshift(1) //[ 1,1,2 ]
unshift(1,2)//[ 1,2,1,2 ]
//一个或多个
  • shift  删除数组最前面的元素
var arr = [ 1,2,3,4 ]
arr.shift() // [ 2,3,4 ]
  • splice  截取元素
var arr = [ 1,2,3]
arr.splice(2,1)//[ 1,2 ]
//(index,个数)
  • reverse  反转数组
var arr = [ 1,2,3 ]
arr.reverse() //[ 3,2,1 ]
  • sort  数组排序
var arr = [1,2,3,11,12,20]
arr.sort() // [1,11,12,2,20,3] 默认是按照字典规则进行排序

arr.sort(function (a,b){ //a:前面的元素,b:后面的元素
    return a - b //从小到大排序
    return b - a //从大到小排序
})
  • concat  拼接数组–返回新数组,原数组不变
var arr1 = [1,2,3]
var arr2 = [2,3,4]
arr1.concat(arr2) //[1,2,3,2,3,4]
  • join  将数组内容拼接成字符串
var arr = [1,2,3,4,5]
arr.join('') // 12345,
//单引号中间内容是拼接符号,直接写括号默认使用逗号拼接
  • indexOf  找数组某一项索引,有多个输出第一项索引号
var arr = [1,'hello',{name:'jack'}]
arr.indexOf('hello) //1
//如果没有该元素输出负1
//indexOf(1,1),后面的1代表从第2个元素开始找(第一个元素为0,索引号)
  • includes 判断数组中是否存在该元素
var arr = ['hello','world']
arr.includes('hello')// true

数组遍历方法

参数一般是需要什么写什么,但是item是必须的

  • forEach 遍历数组
var arr = [1,2,3]
arr.forEach(function(item,index,arr){
    //item为数组中的每一项
    //index是数组索引号
    //arr是原始数组
    console.log(item) // 1  2  3
})
//箭头函数表示
function(item,index){return item}
(item,index)=>item
(item,index)=>{return item}
  • map 遍历数组并映射为新数组,可以根据此修改数组的值
var arr = [1,2,3]
arr.map(function(item,index,arr){
    return item + 10 //新数组[11,12,13]
})
//return {name:item.name,score:item.score+10}
  • filter 过滤数组,找出满足条件的元素组成新数组
var arr = [1,2,3]
arr.filter(function(item,index,arr){
    return item>2 // [3]
})
  • find 找到满足条件的第一个元素并输出(不是数组)
var arr = [1,2,3]
arr.find(function(item,index,arr){
    return item>1 // 2 (元素)
})
  • every 数组中所有元素都满足条件输出true,否则输出false
var arr = [1,2,3]
arr.every(function(item,index,arr){
    return item>0 // true
    //return item>2 //false
})
  • some 数组中只要有一个元素满足条件就输出true
var arr = [1,2,3]
arr.some(function(item,index,arr){
    return item>3 // false 没有一个满足
    //return item>2 // true 有满足条件的元素
})
  • reduce 数组累加器
var arr = [1,2,3]
arr.reduce(function(s,item,index,arr){
    //s为累加和
    //item为累加项即数组每一项
},0)//0为s的初始值
  • findIndex()
    查找满足条件的索引号
var id1 = 1
arr.findIndex(function(item,index,arr){
    return item.id = id1//返回id等于id1的数组元素的索引号
})

数据类型之间存储区别

  1. 数据在内存中有两种存储方式:堆 栈
  2. 堆区域存储对象
  3. 栈区域存储基本数据类型变量或者引用变量

对象存储在堆中,栈中一般存储地址

如果定义两个相同的对象

var obj1 = {name : 'jack'}
var obj2 = {name : 'jack'}
console.log(obj1 == obj2)

//输出false,虽然这两个对象看起来一样,但是这种定义方式会分别在堆中分配空间,obj1和obj2中存放的值地址值,所以输出应为false

根据代码画出对应内存结构图.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值