JS 数组
JS 中,数组(Array)是一种用于存储多个值的数据结构。它可以容纳任意类型的值,包括数字、字符串、对象、函数等。
数组声明
// 1、通过构造函数创建数组
var arr0 = new Array(); // 创建一个空数组,没有元素
var arr1 = new Array(5); // 创建一个长度为 5 的数组;如果数组有长度,但是没有赋值,那么里面每个默认值就是 undefined
arr1[3] = 300; // 通过索引给数组赋值
var arr2 = new Array(10,20,30,40,50); // 创建一个长度为 5 的数组,并同时赋值
// 2、通过字面量的方式创建数组(基本类型创建数组)
var arraryName1 = []; // 空数组
arraryName1[0] = "John";
arraryName1[1] = "Doe";
arraryName1[2] = 46;
arraryName1.push("我是添加元素"); // 添加在末尾
var arraryName2 = [1,2,3]; // 非空数组,含 3 个整数元素
var arraryName3 = ['a','c']; // 非空数组,含两个字符串元素
var arraryName4 = [10,'哈哈',true,null,undefined,new Object()]; // 非空数组,含各种类型的元素(不建议存多种类型,不利于对元素操作)
// 输出数组
console.log(arr); // 直接输出数组名,就能输出数组内容
console.log(arr[1]); // 输出数组 arr 里的第 2 个元素(索引 1 位置的元素)
数组操作
// 循环输出数组
var arr = [10,20,30,40,50];
for(var i=0; i<arr.length; i++){
console.log(arr[i]);
}
// 求数组中所有元素的和
var arr1 = [10,20,30,40,50];
var sum = 0;
for(vaar i=0; i<arr1.length; i++){
sum += arr1[i];
}
console.log(sum);
// 求数组中所有元素的平均值
var arr2 = [1,2,3,4,5];
var sum2 = 0;
for(var i=0; i<arr2.length; i++){
sum2 += arr2[i];
}
console.log(sum2/arr2.length);
// 求数组中所有元素中的最大值
var arr3 = [1,3,2,5,10,100];
var max = arr3[0]; // 假设 max 中存储的是最大值
for(var i=0; i<arr3.length; i++){
if(max < arr3[i]){
max = arr3[i];
}
}
console.log(max);
// 倒序遍历数组
var arr4 = [10,20,30,40,50];
for(var i=arr4.length-1; i>=0; i--){
console.log(arr4[i]);
}
// 把数组中每个元素用|拼接到一起
var names = ['张三','李四','王五'];
var str = ''; // 这里必须有 ='',否则 str 就是 Undefined 类型
for(var i=0; i<names.length; i++){
str += names[i] + '|';
}
console.log(str);
// 去掉数组中重复的 0
var arr5 = [10,0,20,30,0,50,0];
var newArr = []; // 用来存放原数组中非 0 的元素
for(var i=0; i<arr5.length; i++){
if(arr5[i] != 0){
newArr[newArr.length] = arr5[i]; // 把新数组的长度作为下标使用,数组的长度是可以改变的
}
}
console.log(newArr);
// 反转数组(把数组中对称的元素的位置对调)
var arr6 = [10,20,30,40,50];
for(var i=0; i<arr6.length/2; i++){ // 获取交换次数
var temp = arr6[i];
arr6[i] = arr6[arr6.length-1-i];
arr6[arr6.length-1-i] = temp;
}
console.log(arr6);
// 提示用户输入班级人数及每个人的分数
var perCount = parseInt(prompt('请输入班级人数'));
var perScores=[]; // 定义数组存储班级每个人的成绩
for(var i=0; i<perCount; i++){
perScores[perScores.length] = pareseInt(prompt('请输入第'+(i+1)+'个人的成绩:'); // perScores数组的长度会随着元素而增加
}
console.log(perScores);
// 冒泡排序
var arr5=[20,10,40,50,30];
for(var i=0; i<arr5.length-1; i++){ // 获取总共比较几轮(5个元素就比较4轮)
for(var k=0; k<arr5.length-1-i; k++){ // 获取每轮比较几次(第一轮比较4次:5-1-0)
if(arr5[k]<arr5[k+1]){ // 前面的元素比后面小,则交换
var temp = arr5[k];
arr5[k] = arr5[k+1];
arr5[k+1] = temp;
}
}
}
console.log(arr5);
// 数组的方法
arr.length; // 获取数组的长度
arr.length = 0; // 设置 arr 数组的长度为 0,相当于清空了 arr 数组
console.log(arr instanceof Array); // 判断 arr 是不是数组,返回 bool 值
Array.isArray(arr); // 判断 arr 是不是数组,返回 bool 值
var newArr = Array.from(arr);// 克隆 arr 数组
arr1.contact(arr2,arr3,arr4,arr...);// 合并 arr1 和其他数组,组成一个新数组
arr.push(300); // 将 300 追加到 arr 的最后,返回插入后的数组的长度
arr.unshift(500); // 将 500 添加到 arr 的最前面,返回插入后的数组的长度
arr.pop(); // 删除数组最后一个元素,然后返回删除的这个元素的值
arr.shift(); // 删除数组第一个元素,然后返回删除的这个元素的值
arr.indexOf(100); // 查找元素 100 在 arr 中的索引,没有就返回 -1
arr.lastIndexOf(300); // 从数组最后往前找,元素 300 在 arr 中的索引(找到后,索引都是从左往右计算的),没有返回 -1
arr.join("|"); // 将 arr 中的元素,以 | 拼接起来,返回字符串
arr.reverse(); // 反转数组,即把数组中对称的元素的位置对调
var newArr = arr.slice(3,8);// 从数组索引 3 的元素处,截取到索引 8 处的元素前,不包括索引 8 处的元素
arr.splice(0); // 清空掉数组,在 arr 数组索引 0 的位置,向后删掉所有元素(包括索引 0 位置处的元素)
arr.splice(2,1); // 在 arr 数组索引 2 的位置,向后删掉一个元素(包括索引 2 位置处的元素)
arr.splice(2,0,234); // 在 arr 数组索引 2 的位置前,插入元素 234,中间的 0 表示不删除任何元素
arr.splice(2,1,234); // 在 arr 数组索引 2 的位置前,插入元素 234,中间的 1 表示在插入之前,先向后删掉一个元素(包括索引 2 位置处的元素)
// 将 arr 的所有元素,都执行括号中的函数,然后返回新数组
var newArr = arr.map(Math.sqrt);
// 返回对象中的指定字段
var newArr = checkRows.data.map(function (d) {
return d.id;
});
// every(参数是函数)方法:对数组中的每一个元素都进行校验,如果都符合条件,返回 true,否则返回 false
// function 里的参数,ele 表示各个元素的值,index 表示索引的值,resource:谁调用了这个方法,那么 resource 就是谁,即原数组。
var arr1 = [1000,2000,3000];
arr1.every(function(ele,index,resource){
return ele > 2000; // 数组中的每个元素都要大于 2000
});
// filter(参数是函数)方法:让数组中的每个元素都执行里面的函数,返回符合条件的元素
var arr = [10,0,20,0,40,0,60,100,0];
var newArr = arr.filter(function(elem){
return elem != 0;
});
console.log(newArr); // 最后输出[10,20,40,60,100]
// forEach(参数是函数):相当于循环,遍历数组
arr.forEach(function(elem,index){
console.log(elem + ":" + index); // 输出了每个元素,及其索引
});
// sort(参数是函数):对数组进行排序(升序),其中参数 a 是 arr[i],参数 b 是 arr[i+1]
var arr = [1,40,20,10,55,3,100]
arr.sort(function(a,b){ // sort 方法可能不稳定,所以要添加下面的 function 参数里的内容
if(a>b){
return 1; // arr[i] 大于 arr[i+1],返回 1
}else if(a == b){
return 0; // arr[i] 等于 arr[i+1],返回 0
}else{
return -1 // arr[i] 小于 arr[i+1],返回 -1
}
});
console.log(arr); // [1,3,10,20,40,55,100]
// 遍历数组,删除掉其中不符合条件的元素
for(let i=receiveTableData.length-1; i>=0; i--){
if(receiveTableData[i].currentReceiveQty <= 0){
receiveTableData.splice(i,1);
}
}