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
    评论
当使用JavaScript编写程序时,数组是一种常见的数据结构,JavaScript 数组具有许多有用的方法,以下是其中一些常用的方法及其示例: 1. push() 方法:向数组末尾添加一个或多个元素,并返回新的长度。 ```javascript let arr = [1, 2, 3]; arr.push(4); console.log(arr); // [1, 2, 3, 4] ``` 2. pop() 方法:删除数组的最后一个元素,并返回该元素的值。 ```javascript let arr = [1, 2, 3]; let lastElement = arr.pop(); console.log(lastElement); // 3 console.log(arr); // [1, 2] ``` 3. shift() 方法:删除数组的第一个元素,并返回该元素的值。 ```javascript let arr = [1, 2, 3]; let firstElement = arr.shift(); console.log(firstElement); // 1 console.log(arr); // [2, 3] ``` 4. unshift() 方法:向数组的开头添加一个或多个元素,并返回新的长度。 ```javascript let arr = [1, 2, 3]; arr.unshift(0, -1); console.log(arr); // [-1, 0, 1, 2, 3] ``` 5. slice() 方法:返回一个新的数组,包含从起始位置到结束位置(不包括结束位置)之间的元素。 ```javascript let arr = [1, 2, 3, 4, 5]; let newArr = arr.slice(1, 4); console.log(newArr); // [2, 3, 4] ``` 6. splice() 方法:向数组中插入或删除元素。可以指定要删除的元素的位置和数量,并且可以指定要添加的元素。 ```javascript let arr = [1, 2, 3, 4, 5]; arr.splice(2, 1); // 从位置2开始删除1个元素 console.log(arr); // [1, 2, 4, 5] arr.splice(2, 0, 3); // 在位置2插入元素3 console.log(arr); // [1, 2, 3, 4, 5] arr.splice(2, 1, 'three'); // 用 'three' 替换位置2的元素 console.log(arr); // [1, 2, 'three', 4, 5] ``` 7. indexOf() 方法:返回数组中第一个匹配项的索引。 ```javascript let arr = [1, 2, 3, 4, 5]; let index = arr.indexOf(3); console.log(index); // 2 ``` 8. lastIndexOf() 方法:返回数组中最后一个匹配项的索引。 ```javascript let arr = [1, 2, 3, 4, 3, 5]; let lastIndex = arr.lastIndexOf(3); console.log(lastIndex); // 4 ``` 9. forEach() 方法:对数组中的每个元素执行指定的操作。 ```javascript let arr = [1, 2, 3]; arr.forEach(function(item) { console.log(item); }) // 输出:1 2 3 ``` 10. map() 方法:返回一个新的数组,其中包含对原始数组中的每个元素应用指定函数后的结果。 ```javascript let arr = [1, 2, 3]; let newArr = arr.map(function(item) { return item * 2; }) console.log(newArr); // [2, 4, 6] ``` 11. filter() 方法:返回一个新的数组,其中包含满足指定条件的原始数组元素。 ```javascript let arr = [1, 2, 3, 4, 5]; let newArr = arr.filter(function(item) { return item % 2 === 0; }) console.log(newArr); // [2, 4] ``` 12. reduce() 方法:返回一个值,该值是通过对数组中的每个元素应用指定的函数来计算的。 ```javascript let arr = [1, 2, 3]; let sum = arr.reduce(function(total, item) { return total + item; }, 0) console.log(sum); // 6 ``` 以上是一些常用的 JavaScript 数组方法及其示例,它们可以帮助你轻松地对数组进行操作,实现各种有用的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值