js数组及其应用

1、数组的概念
所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。

2、数组的定义
数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。

3、通过字面量创建数组

// 创建一个空数组
var arr1 = []; 
// 创建一个包含3个数值的数组,多个数组项以逗号隔开
var arr2 = [1, 3, 4]; 
// 创建一个包含2个字符串的数组
var arr3 = ['a', 'c']; 

4、获取数组元素
(1)、数组的取值

// 格式:数组名[下标]	下标又称索引,是从0开始的
// 功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined。
var arr = ['red', 'green', 'blue'];
arr[0];	// red
arr[2]; // blue   等同于arr[arr.length - 1]
arr[3]; // 这个数组的最大下标为2,因此返回undefined

(2)、数组的长度

// 可以通过数组的length属性获取数组的长度
console.log(arr3.length);

// 可以设置length属性改变数组中元素的个数
arr3.length = 0;

5、遍历数组
遍历:遍及所有,对数组的每一个元素都访问一次就叫遍历。

// 顺向遍历
for(var i = 0; i < arr.length; i++) {
	// 数组遍历的固定结构
}

// 反向遍历,先打印最后一个
for (var i=arr.length-1;i>=0;i--){

}

6、数组中新增元素
格式:数组名[下标/索引] = 值;

// 如果下标有对应的值,会把原来的值覆盖,如果下标不存在,会给数组新增一个元素。
var arr = ["red", "green", "blue"];
// 把red替换成了yellow
arr[0] = "yellow";
// 给数组新增加了一个pink的值
arr[3] = "pink";

7、案例

// 案例一:求一组数中的所有数的和和平均值。
var numbers = [35,18,35,90,11,12]
var sum = 0;
var avg;
for (var i=0;i<numbers.length;i++){
    sum += numbers[i];
}
avg = sum / numbers.length;   // 33.5


// 案例二:求一组数中国的最大值和最小值,以及所在位置(即最大值和最小值在这组数中的位置)
var numbers2 = [65,13,88,10,25]

// 假设数组中的第一个数是最大值
var max = numbers2[0];
var min = numbers2[0];

var maxIndex;  // 最大值的索引
var minIndex;   // 最小值的索引
for (var i=1;i<numbers2.length;i++){
    if (max < numbers2[i]){
        max = numbers2[i];
        maxIndex = i;
    }
    if (min > numbers2[i]){
        min = numbers2[i];
        minIndex = i;
    }
}
console.log(min);
console.log(minIndex);
console.log(max);
console.log(maxIndex);
// 如果将第一个数设为最大值或最小值,则存在bug,最大值或最小值的索引即为undefined,因为我们的循环是从1开始的
// 解决方案:设置初始值var maxIndex = 0; var minIndex = 0;



// 案例三:将字符串数组用|或其他符合分割


// 思路:往第二个元素之前加分隔符
var names = ['zs', 'ls','zl','ww'];
var str = names[0];
var seperator = '!'   // 定义分割符

for (var i=1;i<names.length;i++){
    str = str + seperator + names[i];
}
console.log(str);   // 'zs!ls!zl!ww'


//案例四:要求将数组中为0的项去掉,将不为0的值存入一个新的数组,生成新的数组。

var numbers3 = [5,6,89,0,11,0,12,3,0];
// 思路:找到数组中不为0的所有元素,然后将其放入一个新数组中

var newArray = [];
for (var i=0;i<numbers3.length;i++){
    if (numbers3[i] !== 0){
        newArray[newArray.length] = numbers3[i];  // 不能使用newArray[i] = numbers3[i],因为i不连续
    }
}

// 案例五:翻转数组

var numbers4 = [4,5,7,9]
var newArray = [];
for (var i =numbers4.length-1;i>=0;i--){
    newArray[newArray.length] = numbers4[i];
} 
console.log(newArray);   // [9,7,5,4]

// 案例六:冒泡排序

// 冒泡排序是一种简单的排序算法,它重复的走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,走访的工作量是重复的进行直到没有需要交换,也就是该数列已经排序完成,从小到大排列到顶端。

var numbers5 =[97,68,72,29,51,45];
var count = 0;  // 记录循环次数
// 外层循环,控制趟数,找到每趟的最大值
for (var i=0;i<numbers5.length - 1;i++){
    count++;
    // 内存循环,控制比较的次数,并且判断两个数的大小,把小的数往前移动
    for (var j=0;j<numbers5.length -1- i;j++){
        count++;
        // 两两比较,从小到大排序
        if (numbers5[j]>numbers5[j+1]){
            // 交换位置
            var tmp = numbers5[j];
            numbers5[j] = numbers5[j+1];
            numbers5[j+1] = tmp;
        }
    }
}
console.log(numbers5);  // [29, 45, 51, 68, 72, 97]
console.log(count);  // 20

// 优化

 var numbers5 =[97,68,72,29,51,45];
var count = 0;  // 记录循环次数
// 外层循环,控制趟数,找到每趟的最大值
for (var i=0;i<numbers5.length - 1;i++){
    var isSort = true;
    count++;
    // 内存循环,控制比较的次数,并且判断两个数的大小,把小的数往前移动
    for (var j=0;j<numbers5.length -1- i;j++){
        count++;
        // 两两比较,从小到大排序
        if (numbers5[j]>numbers5[j+1]){
            // 交换位置
            isSoret = false;
            var tmp = numbers5[j];
            numbers5[j] = numbers5[j+1];
            numbers5[j+1] = tmp;
        }
    }
    // 某一趟结束,判断一下排序是否结束
    // 如何判断排序是否排好:根据是否发生数据两两交换,发生了说明没有排好
    if (isSort){
        break;
    }
}
console.log(numbers5);  // [29, 45, 51, 68, 72, 97]
console.log(count);  // 20

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值