JavaScript对象
数组
- 概念:数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。
- 本质:数组是程序在 内存 中申请的N块连续的 空间,可以用来保存一组数据
创建数组
<script>
// 1.new Array();
// 创建了一个空的数组
let arr = new Array();
console.log(arr);
//2.new Array(长度)
// 创建一个有长度的空数组
let arr2 = new Array(5);
console.log(arr2);
// 3.new Array(数据1,数据2,数据3....);
let arr3 = new Array('张三', 20, '男');
console.log(arr3);
// 4.利用字面量
// 创建一个空数组
let arr4 = [];
console.log(arr4);
// 5.利用字面量[数据];
let arr5 = [10];
console.log(arr5);
let arr6 = ['张三', 32, '男'];
console.log(arr6);
let arr7 = [5];
console.log(arr7);
</script>
数组的赋值方式
<script>
// 在声明的同时赋值
let arr1 = [1,2,3,4,5,6,7];
console.log(arr1);
// 如果在声明之后想往数组中添加数据(元素)
// 利用下标:每一个数组内部的元素,都拥有一个下标
// 从0开始,往后递增
// 数组名[下标值]=数据;
// 拓展:不连贯的下标数组,稀疏数组
let arr2=[];
arr2[0]='我';
arr2[1]='是';
arr2[2]='谁';
arr2[10]='啊';
console.log(arr2);
// 如何获得数组中指定下标的元素
console.log(arr2[1]);
</script>
数组的三要素
数组的三要素:
元素
,下标
,长度
- 元素:存放在数组格子中的 数据
- 数组元素可以是
任意类型
的数据:数值、字符串、布尔值、函数、数组、对象…
- 数组元素可以是
- 下标:数组中为每个格子都设置了一个 ‘编号’
- 特点:数组的下标 从0开始
- 长度:保存了数组中所有元素的个数
数组的长度与下标的关系:
最大下标+1=长度
数组的长度与下标的关系:
最大下标=长度-1
<script>
// 数组的三要素:元素,下标,长度
// 数组的长度:数组中有多少个元素
// 数组的长度与下标的关系:最大下标+1=长度
// 数组的长度与下标的关系:最大下标=长度-1
// 如何获得数组的长度
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log(arr.length);
// 数组长度可否改变
arr.length = 20; //数组的长度可以变大,添加空元素
console.log(arr);
arr.length = 5;
console.log(arr); //数组的长度可以变小,但是数据会被删除(不可逆)
</script>
利用数组长度添加元素
- 利用
下标
的方式
// 利用下标的方式来继续添加元素
let arr = [1,2,3,4,5];
arr[5] = 6;
arr[6] = 7;
arr[7] = 8;
arr[8] = 9;
arr[9] = 10;
console.log(arr);
- 利用
数组的长度
(数组的长度是可变的)
let arr = [1,2,3,4,5];
arr[arr.length] = 6;
arr[arr.length]=7;
// 同理可得
arr[arr.length]=8;
arr[arr.length]=9;
arr[arr.length]=10;
console.log(arr);
案例:
- 循环添加数组元素小练习1:往数组中添加1-100总共100个数字
// 循环添加数组元素小练习1:往数组中添加1-100总共100个数字
let arr2=[];
for(let i=0;i<50;i++){
// 利用i的一致性与数组下标的一致性
arr2[i]=i+1;
// 利用长度length
// arr2[arr2.length]=i+1;
}
console.log(arr2);
- 练习:再已有数组中,循环添加数据51-100
let arr3=[1,2,3,4.5];
for(let i=0;i<50;i++){
arr3[arr3.length]=i+51;
}
console.log(arr3);
push方法
// 拓展:push方法
let arr4=[1,2,3,4];
for(let i=0;i<100;i++){
// 利用push方法,在数组的最后添加元素
arr4.push(i+1);
}
console.log(arr4);
- 小案例
<script>
// 1.将0-100这些数字,正序存到一个数组中
let arr = [];
for (i = 0; i <= 100; i++) {
arr.push(i);
}
console.log(arr);
console.log('2--------------------------');
// 2.将0-100这些数字,倒序存到一个数组中
let arr1 = [];
for (i = 100; i >= 0; i--) {
arr1.push(i);
}
console.log(arr1);
console.log('3--------------------------');
// 3.将0-100这些数字正序存到一个数组中(跳过5的倍数)
let arr2 = [];
for (i = 0; i <= 100; i++) {
// console.log(i);
if (i % 5 == 0 && i != 0) {
continue;// 跳过本次循环,进入下一次
}
arr2.push(i);
}
console.log(arr2);
console.log('4-----------------------------');
// 4.将0-100这些数字正序存到一个数组中(只要5的倍数)
let arr3 = [];
for (i = 0; i <= 100; i++) {
// console.log(i);
if (i % 5 == 0 && i != 0) {
arr3.push(i);
}
}
console.log(arr3);
console.log('5-----------------------------');
// 5.将其5的倍数的数字,筛选出来,存到一个新的数组中
let arr4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 141, 51, 5, 18, 29, 95];
// 是5的倍数
let arrNew = [];
// 不是5的倍数
let otherarr = [];
// 数组有多少数据,就要循环几次-----> length
for (let i = 0; i < arr4.length; i++) {
// 判断数组是否可以被5整除
if (arr4[i] % 5 == 0) {
// 将符合的数据保存到新数组里
arrNew.push(arr4[i]);
} else {
otherarr.push(arr4[i]);
}
}
console.log(arr4.length);
console.log(arrNew);
console.log(otherarr);
</script>
- 打印水仙花数
<script>
// 数学函数:求多次幂
// money=Math.pow(1.015,3)*100;
// console.log(money);
// 求100-999的水仙花数,将此保存到一个数组中
let arr=[];
// 打印所有的三位数
for (let i = 100; i < 1000; i++) {
// 判断是不是水仙花数
// 获取i的百位 十位 个位的数字
// 获取百位数字
let bai = parseInt(i / 100);
// console.log('百位上的数是:'+bai);
// 获取十位上的数字
let shi = parseInt((i - bai * 100) / 10);
// console.log('十位上的数是:'+shi);
//获取各位上的数
// 法一:
// let ge=parseInt(i-bai*100-shi*10)
// 法二:
let ge = i % 10;
// console.log('个位上的数是:'+ge);
// 判断i是否水仙花数
// 方法一:
/* if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i) {
// console.log('水仙花数是' + i);
arr.push(i);
} */
// 方法二:
if (Math.pow(bai,3) + Math.pow(shi,3) + Math.pow(ge,3) == i) {
// console.log('水仙花数是' + i);
arr.push(i);
}
}
console.log(arr);
</script>
- 数组去重
- 假设法(反证法)
// 遍历老数组
for (let i = 1; i < oldArr.length; i++) {
// 假设法:假设摸个条件成立
let flag = true;
// 遍历新数组
for (let j = 0; j < newArr.length; j++) {
// 如果能进入这个位置,就代表新老数组中有相同的数据
// 假设失败
if (oldArr[i] == newArr[j]) {
flag = false;
}
}
if (flag) {
newArr.push(oldArr[i]);
}
}
console.log(newArr);
- indexof方法
let oldArr = [2, 34, 2, 5, 44, 6, 8, 9, 8, 4, 5, 44, 34, 67, 6];
let newArr = [oldArr[0]];
for (let i = 0; i < oldArr.length; i++) {
if (newArr.indexOf(oldArr[i]) == -1) {
// 如果存在,则返回下标,如果不存在,则返回-1
newArr.push(oldArr[i]);
}
}
console.log(newArr);