数组的认识

数组对象

数组的作用:使用单独的变量名来存储一系列的值,数组可以村塾任意数据类的数据

数组的创建

// 字变量
var arr = [1, 'true', true, null, undefined, [], {}, function () { }]

// 使用关键字 new  
// var arr1 = new Array(1,2,3,4) // 给数组中添加元素
var arr1 = new Array(4) // 如果只有一个参数 代表的是数组的长度 也就是可以存储几个元素

// 注意:给数组添加元素或者从数组中获取元素 都要使用下标

arr1[0] = 10
arr1[100] = 101

console.log(arr1);

数组是有长度和下标的,可读可写

循环遍历数组

循环遍历就是把数组中的元素一次拿出来,所以,可以使用for循环遍历数组

var arr = [1, 2, 3, 4, 5, 6, 7, 8]
for (var i = 0; i < arr.length; i++) {
    // console.log(arr[i]);
    // console.log(typeof i);

    document.body.innerHTML += arr[i] + '<br />'
}

for-in

for-in是用来循环对象,不要用来循环数组,因为其下标值的字符串

var obj = {
    name: '张三',
    age: 20
}
for (var key in obj) {
    console.log(key);
    console.log(obj[key]);
}

为什么不适用for-in去循环数组---因为会把下标值的数据类型更新为字符串

for-in的使用
  • key值返回的是字符串

  • for-in循环设计的初衷是给不同以字符串的值为key的对象使用的,而不是数组

  • 不仅可以循环数组的元素,还可以循环任意其他自定义添加的数据

for的使用
  • 基于索引的时间,有长度有下标

  • 支持遍历是进行添加和删除操作

数组的操作方法

栈方法

数组的栈方法就是针对数组末尾进行的操作

语法:

数组.push(): // 在数组的末尾添加元素,有参数,参数就是需要添加的元素,可以添加多个,返回值是新数组的长度
数组.pop(): // 在数组的末尾删除元素,没有参数的,只能删除一个元素,返回值是被删除的元素
var arr = ['貂蝉', '西施', '吕布', '王昭君']

arr.push('杨玉环','孙尚香')
console.log(arr.push('杨玉环','孙尚香')); // 新数组的长度

arr.pop()  // 没有参数 一次只能删除一个
console.log(arr.pop()); // 返回值是被删除的元素

队列方法

数组的队列方法就是针对数组首部进行的操作

语法“

数组.unshift(): // 在数组的首部添加元素,有参数,参数就是需要添加的元素,可以添加多个,返回值是新数组的长度
数组.shift(): // 在数组的首部删除元素,没有参数的,只能删除一个元素,返回值是被删除的元素
arr.unshift('杨玉环','马可波罗')
console.log(arr.unshift('杨玉环','马可波罗'));

arr.shift()
console.log(arr.shift());

splice()删除 添加 替换

语法:

数组.splice(开始位置,删除的项数,插入的元素)

开始位置:是一个数值类型的number,这个参数是下标定义的

删除的项数:删除几项,是一个数值类型的number

插入的的元素:可以是任意多个参数

删除

可以删除任意数量的项,只需要指定两个参数,要删除的第一项的位置和要删除的个数

// 删除 -- 包含开始和结束位置的
arr.splice(2,2) 
console.log(arr);
添加

可以向指定的位置添加任意项,只需要提供三个参数,起始位置,0(要删除的项数)和要插入的位置,可以插入多个参数,每个参数之间用都要隔开

// 添加 -- 可以添加多个 -- 删除的项数要为 0 
arr.splice(2, 0, '杨玉环', '王家政')
console.log(arr);
替换
arr.splice(2, 1, '杨玉环', '王家政')
console.log(arr);

数组去重

/*
步骤:
1、先找数组中的第一个元素
2、从第二个元素开始,依次找后面的所有的元素,与第一项比较
3、相等的元素删除掉  -- 数组中元素的下标要递减
*/

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

console.log(arr);
var newArr = []
for (var i = 0; i < arr.length; i++) {
    if (newArr.indexOf(arr[i]) === -1) {
        newArr.push(arr[i])
    }
}
console.log(newArr);

数组排序

sort()排序方法

语法:

var arr = [2,4,1,6,4,3,12]
console.log(arr.sort()); // 默认升序排序

注意:默认排序是升序,但是只能排第一位上的数字

sort()这个方法有一个参数,这个参数是一个函数,这个函数有两个参数,可以让这两个参数执行减法运算

arr.sort(function (a, b) {
    // return a - b  // 升序排序
    return b - a // 降序排序
})
var arr = [
    {name:'刘备', num: 78},
    {name:'大备', num: 71},
    {name:'二备', num: 74},
    {name:'三备', num: 76},
    {name:'四备', num: 72},
    {name:'五备', num: 73},
    {name:'六备', num: 79}
]

arr.sort(function (a, b) {
    // return a.num - b.num  // 数字排序
    /* 
    zh:告诉他比较的是中文
    localeCompare:就是拿到第一个中文的汉语拼音的首字母
    */
    return a.name.localeCompare(b.name, 'zh')
})

冒泡排序

数组中相邻的两个元素进行比较,如果前一项大于后一项,就交换位置,否则就不交换位置

var arr = [5, 8, 7, 4]

/*
1、5 > 8 ?  不交换位置  5,8,7,4
2、8 > 7  交换位置  5 7 8 4 
3、8 > 4  交换位置  5 7 4 8  第一轮结束后,最大的值在最右边  

4、5 > 7 ? 不交换位置  5 7 4 8 
5、7 > 4 交换位置  5  4  7 8   第二轮结束 


6、 5 > 4 交换位置  4  5  7  8 
*/

for (var i = 0; i < arr.length; i++) { // 控制比较的次数
    for (var j = 0; j < arr.length; j++) {
        if(arr[j] > arr[j + 1]){
            var temp = arr[j]
            arr[j] = arr[j+1] 
            arr[j + 1] = temp
        }
    }
}

选择排序

从第一项开始,每一项和后面的所有项一次比较,前一项大于后一项,就交换位置,否则不交换位置

/* 
1、5 > 8 ? 不交换位置  5, 8, 7, 4
2、5 > 7 ? 不交换位置  5, 8, 7, 4
3、5 > 4  交换位置  4, 8, 7, 5


4、8 > 7 ? 交换位置  4  7  8  5 
5、7 > 5 ? 交换位置  4  5  8  7  


6、8 > 7 ?  交换位置 4  5  7  8  
*/

for (var i = 0; i < arr.length; i++) {  // 取第一个数 
    for (var j = i + 1; j < arr.length; j++) {
        if (arr[i] > arr[j]) {
            var num = arr[i] 
            arr[i] = arr[j]
            arr[j] = num
        }
    }
}

快速排序

找到数组中的中间值,将中间值从原数组中删除,将数组和中间项进行比较,比中间值大的放到左边的数组中,小的放到右边的数组中,再将左 中 右 合并,左 右数组没有排序完成在进行调用函数排序,最终利用递归的方式完成排序进行合并

function fun(arr) {
    if (arr.length <= 1) {
        return arr
    }
    var md = Math.floor(arr.length / 2)
    var sum = arr.splice(md, 1)[0]//删除中间项

    var left = []//存放大于中间值的
    var right = []//小于中间值

    for (var i = 0; i < arr.length; i++) {
        if (arr[i] < sum) {
            right.push(arr[i])
        } else {
            left.push(arr[i])
        }
    }
    return fun(left).concat(sum, fun(right))
    // return left.concat(sum,right)
}
var arr = [15, 11, 12, 7, 9, 4, 3,10,24,30]
console.log(fun(arr));

数组的其他方法

  • join()---把数组转为字符串

  • concat()---合并数组

var arr1 = [1,2,3]
var arr2 = ['a','b','c'] 
var arr3 = ['haha', 'hehe', 'gaga'] 

var arr = arr1.concat(arr2,arr3)
console.log(arr);
  • reverse()---反转

console.log(arr.reverse());
  • indexOf()

  • slice()

数组的迭代方法

forEach

没有返回值,就是一个简单的循环,对数组中给定的每一项运行给定的函数,没有返回值,可以代替for循环

语法:

数组.forEach(function(item,index,arr){ 
// 逻辑代码  
})

item:数组中的元素

index:数组中元素的下标

arr:原数组

map

map()方法返回一个新数组,数组中的元素为原始数组元素调用函数后处理后的值,不会对空数组检测,不会改变原数组

语法:

数组.map(function(item,index,arr){
 // 逻辑代码
   })

item:数组中的元素

index:数组中元素的下标

arr:原数组

var n = arr.map(function (item, index, arr) {
    return item * 2
})

filter

filter()方法创建一个新数组,新数组中的元素是通过指定数组中符合条件的所有的元素,不会空数组检测,不会改变原数组

语法:

数组.filter(function(item,index,arr){ 
// 逻辑代码 
 })

item:数组中的元素

index:数组中元素的下标

arr:原数组

var n1 = arr.filter(function (item, index, arr) {
    return item >= 5
})

every

every()方法检测数组中所有元素是否都符合指定的条件,如果数组汇总检测到有一个元素不满足,整个表直接返回false,剩余的元素不会在进行检测,如果元素都满足条件,返回true

语法:

数组.every(function(item,index,arr){ 
// 逻辑代码 
 })

item:数组中的元素

index:数组中元素的下标

arr:原数组

var n2 = arr.every(function (item, index, arr) {
    return item >= 4
})

some

some()方法用于检测数组中的元素能够满足指定的条件,如果有一个元素满足条件,表达式返回true,剩余的元素不再执行检测,如果没有满足的元素,返回false

语法:

数组.some(function(item,index,arr){ 
// 逻辑代码  
})

item:数组中的元素

index:数组中元素的下标

arr:原数组

var n3 = arr.every(function (item, index, arr) {
    return item > 2
})

总结

  • forEach:就是一个循环,胎体for循环用来遍历数组的

  • map:是对数组元素做操作,并返回一个新的数组

  • filter:数组元素满足某一个条件,并以数组的形式,返回满足条件的元素

  • every:针对数组元素做操作,只有所有的数组元素满足了某一个条件,返回值是true,只要有一个不满足条件,加u返回false

  • some:如果有一个元素满足条件,表达式返回true,剩余的元素不进行检测,如果没有满足条件的元素,返回值就是false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值