可以通过修改length长度来实现数组扩容的目的
length属性是可读写的
image.png修改数组长度
例如,arr = ['red', 'green', 'blue'];
arr.length = 5;
此时就把数组长度变成了5,但是数组中只有3个元素
此时等价于声明了变量未给值,数据类型是undefined
var arr = ['red', 'green', 'blue'];
arr[3] = 'yellow';
console.log(arr);
image.png
var arr = ['red', 'green', 'blue'];
arr[0] = 'yellow';
console.log(arr);
image.png
上面两个直接用索引给值的案例,如果原本这个索引是没有占用的,就是追加,如果是已经占用的就是替换
var arr = ['red', 'green', 'blue'];
arr = 'yellow';
console.log(arr);
var arr = [];
for (i = 0; i < 10; i++) {
arr[i] = i + 1;
}
console.log(arr);
image.png
要求:将数组[2,0,6,1,77,0,52,0,25,7];中大于等于10的元素选出来,放入新的数组
这个案例的重点是拿到大于10的数的同时,其他的小于10的元素被删掉后,会以空元素empty的形式继续存在,这些空元素会同时一起被保存到新数组,如下图
image.png要解决这个问题的办法是:声明一个变量j=0,让它作为新数组的索引,并且让它自增,这样,第一次拿到的大于10的值索引就是0,第二次拿到的就是j自增厚的结果1,以此类推
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var max = [];
var j = 0;
for (i = 0; i < arr.length; i++) {
if (arr[i] > 10) {
max[j] = arr[i];
j++;
}
}
console.log(max);
//方法2
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
var max = [];
//max.length = 0,可以用它作为max数组的索引,
//每存入一个元素,长度自然增长1位
for (i = 0; i < arr.length; i++) {
if (arr[i] > 10) {
max[max.length] = arr[i];
}
}
console.log(max);
image.png
要求:将数组[2, 0, 6, 1, 77, 0, 52, 0, 25, 7];中的0去掉后,形成一个不包含0的新数组
// var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];中的0去掉,形成一个不含0的新数组
var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
num = [];
for (i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
num[num.length] = arr[i];
}
}
console.log(num);
image.png
要求:将数组['red','green','blue','pink','purple']的内容反过来存放
旧数组的最后一个元素时新元素的第一个元素,以此类推
//重点:arr存入num的每一个元素是它的索引
var arr = ['red', 'green', 'blue', 'pink', 'purple'];
num = [];
for (i = arr.length - 1; i >= 0; i--) {
num[num.length] = arr[i]
}
console.log(num);
image.png
数组排序(冒泡排序)
冒泡排序:把一系列的数据按照约定的顺序进行排列显示(从小到大或从大到小)
原理是一次比较两个变量值,如果他们的顺序错误就交换过来(就像之前的交换;两个变量的值,用的方法是创建一个零时变量来作为媒介交换),一直重复进行到没有可交换的元素为止
冒泡排序不是一次循环就能出结果的,每次只能比出一个结果来,下一轮继续比较下一个,理论上有几个元素就要比较几轮
分析
1. 一共需要交换的次数,用外层for循环做
(1) 5个数一共需要循环4次
(2)长度就是数组的长度减去1 ==>arr.length- 1
2.每一次交换次数用内层for循环做
(1)第一次交换4次
(2)第二次交换3次
(3)第三次交换2次
(4)第四次交换1次
长度就是数组长度减去次数
但是我们次数是从0开始的,所以最终arr.length - i - 1
3.最后一步,交换两个变量位置,完成排序
(1)前一个数和后一个数相比较,如果需要交换就交换顺序
(2)交换位置的方法是之前学的交换两个变量值的方法:声明一个零时变量,用这个零时变量来进行交换
image.png交换次数也是交换完成后这个数最终的索引
索引为 | 交换次数 | 规律 |
---|---|---|
0 | 4 | arr.length - i - 1 |
1 | 3 | arr.length - i - 1 |
2 | 2 | arr.length - i - 1 |
3 | 2 | arr.length - i - 1 |
var arr = [5, 4, 3, 2, 1];
for (i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
image.png
向数组末尾增加元素:
/*
* push()
* - 该方法可以向数组的末尾添加一个或多个元素,并返回数组的新的长度
* - 可以将要添加的元素作为方法的参数传递,
* 这样这些元素将会自动添加到数组的末尾
* - 该方法会将数组新的长度作为返回值返回
*/
var arr = ["孙悟空","猪八戒","沙和尚"];
var result = arr.push("唐僧","蜘蛛精","白骨精","玉兔精");
console.log("result = "+result);//返回添加元素后的新数组长度
console.log(arr);
image.png
删除:
/*
* pop()
* - 该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
*/
var arr = ["孙悟空","猪八戒","沙和尚","唐僧","蜘蛛精","白骨精","玉兔精"];
result = arr.pop();
console.log("result="+result);
console.log(arr);
已被删除的值作为返回值返回:
image.png
向数组前面增加元素:
/*
* unshift()
* - 向数组开头添加一个或多个元素,并返回新的数组长度
* - 向前边插入元素以后,其他的元素索引会依次调整
* - 返回值是新数组的长度,跟push一样
*/
var arr = ["孙悟空","猪八戒","沙和尚","唐僧","蜘蛛精","白骨精","玉兔精"];
console.log(arr);
result =arr.unshift("牛魔王","二郎神");
console.log(arr);
console.log("result="+result);
image.png
删除数组前面的元素:
/*
*pop()删除最后一个元素
*
* unshift()向数组开头添加一个或多个元素,并返回新的数组长度
* shift()
* - 可以删除数组的第一个元素,并将被删除的元素作为返回值返回
*/
var arr = ["孙悟空","猪八戒","沙和尚","唐僧","蜘蛛精","白骨精","玉兔精"];
console.log(arr);
result = arr.shift("孙悟空");
console.log(arr);
console.log("result="+result);
被删除的第一个元素作为返回值返回:
image.png
网友评论