? 数组中可以通过以下方式在数组的末尾插入新元素:
数组[ 数组. length ] = 新数据;
1.5.1 通过修改 length 长度新增数组元素
可以通过修改 length 长度来实现数组扩容的目的
length 属性是可读写的
- var arr = ['red', 'green', 'blue', 'pink'];
- arr.length = 7;
- console.log(arr);
- console.log(arr[4]); // undefined
- console.log(arr[5]);
- console.log(arr[6]);
其中索引号是 4,5,6 的空间没有给值, 就是声明变量未给值, 默认值就是 undefined.
1.5.2 通过修改数组索引新增数组元素
可以通过修改数组索引的方式追加数组元素
不能直接给数组名赋值, 否则会覆盖掉以前的数据
- var arr = ['red', 'green', 'blue', 'pink'];
- arr[4] = 'hotpink';
- console.log(arr);
这种方式也是我们最常用的一种方式.
- // 1. 新增数组元素 修改 length 长度
- var arr = ['red', 'green', 'blue'];
- console.log(arr.length);
- arr.length = 5; // 把我们数组的长度修改为了 5 里面应该有 5 个元素
- console.log(arr);
- console.log(arr[3]); // undefined
- console.log(arr[4]); // undefined
- // 2. 新增数组元素 修改索引号 追加数组元素
- var arr1 = ['red', 'green', 'blue'];
- arr1[3] = 'pink';
- console.log(arr1);
- arr1[4] = 'hotpink';
- console.log(arr1);
- arr1[0] = 'yellow'; // 这里是替换原来的数组元素
- console.log(arr1);
- arr1 = '有点意思';
- console.log(arr1); // 不要直接给 数组名赋值 否则里面的数组元素都没有了
- // 案例: 数组存放 1~10 个值
- // 新建一个数组, 里面存放 10 个整数( 1~10)
- // 核心原理: 使用循环来追加数组.
- // 1, 声明一个空数组 arr.
- // 2, 循环中的计数器 i 可以作为数组元素存入.
- // 3, 由于数组的索引号是从 0 开始的, 因此计数器从 0 开始更合适, 存入的数组元素要 + 1.
- var arr = [];
- for (var i = 0; i <100; i++) {
- // arr = i; 不要直接给数组名赋值 否则以前的元素都没了
- arr[i] = i + 1;
- }
- console.log(arr);
- // demo: 筛选数组
- // 将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中大于等于 10 的元素选出来, 放入新数组.
- // 1, 声明一个新的数组用于存放新数据 newArr.
- // 2, 遍历原来的旧数组, 找出大于等于 10 的元素.
- // 3, 依次追加给新数组 newArr.
- // 方法 1
- var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
- var newArr = [];
- var j = 0;
- for (var i = 0; i < arr.length; i++) {
- if (arr[i]>= 10) {
- // 新数组索引号应该从 0 开始 依次递增
- newArr[j] = arr[i];
- j++;
- }
- }
- console.log(newArr);
- // 方法 2:Array.length
- var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
- var newArr = [];
- // 刚开始 newArr.length 就是 0
- for (var i = 0; i <arr.length; i++) {
- if (arr[i]>= 10) {
- // 新数组索引号应该从 0 开始 依次递增
- newArr[newArr.length] = arr[i];
- }
- }
- console.log(newArr);
demo: 数组去重(删除指定数组元素)
- // 将数组 [2, 0, 6, 1, 77, 0, 52, 0, 25, 7] 中的 0 去掉后, 形成一个不包含 0 的新数组.
- // 1, 需要一个新数组用于存放筛选之后的数据.
- // 2, 遍历原来的数组, 把不是 0 的数据添加到新数组里面(此时要注意采用数组名 + 索引的格式接收数据).
- // 3, 新数组里面的个数, 用 length 不断累加.
- var arr = [2, 0, 6, 1, 77, 0, 52, 0, 25, 7];
- var newArr = [];
- for (var i = 0; i <arr.length; i++) {
- if (arr[i] != 0) {
- newArr[newArr.length] = arr[i];
- }
- }
- console.log(newArr);
- // demo: 数组翻转
- // 将数组 ['red', 'green', 'blue', 'pink', 'purple'] 的内容反过来存放
- // 1, 声明一个新数组 newArr
- // 2, 把旧数组索引号第 4 个取过来(arr.length - 1), 给新数组索引号第 0 个元素 (newArr.length)
- // 3, 我们采取 递减的方式 i--
- var arr = ['red', 'green', 'blue', 'pink', 'purple', 'hotpink'];
- var newArr = [];
- for (var i = arr.length - 1; i>= 0; i--) {
- newArr[newArr.length] = arr[i]
- }
- console.log(newArr);
算法: 观察执行过程, 找到规律, 转为代码.
- // 冒泡排序
- // var arr = [5, 4, 3, 2, 1];
- var arr = [4, 1, 2, 3, 5];
- // 外层循环管趟数 [5 个元素, 冒泡排序 4 趟, 应该是 arr.length - 2, 结果一样]
- for (var i = 0; i <= arr.length - 1; i++) {
- for (var j = 0; j <= arr.length - i - 1; j++) { // 里面的循环管 每一趟的交换次数
- // 内部交换 2 个变量的值 前一个和后面一个数组元素相比较
- if (arr[j] <arr[j + 1]) {
- var temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- console.log(i);
- }
- console.log(arr);
- // 我的写法 1
- var arr = [4, 1, 9, 2, 7, 3, 5];
- var len = arr.length;
- // i <= len - 2,i <= len - 1, 结果都一样
- for (var i = 0; i <= len - 2; i++) {
- for (j = 0; j <= len - 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); // [1, 2, 3, 4, 5, 7, 9]
我的写法 2
- var arr = [4, 1, 9, 2, 7, 3, 5];
- var len = arr.length;
- for (var i = 0; i <len; i++) {
- var temp;
- for (var j = i; j < len; j++) {
- if (arr[j]> arr[j + 1]) {
- temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- }
- }
- }
- console.log(arr); // [1, 2, 3, 4, 5, 7, 9]
来源: http://www.bubuko.com/infodetail-3365026.html