数组(Array)
使用数组
创建数组
// 1.通过[]操作符声明一个数组变量 效率最高
let numbers = [];
// 2.在声明数组变量时,直接在[]操作符内放入一组元素
let numbers_ = [1, 2, 3, 4, 5];
// 3.调用Array的构造函数创建数组
let numbers__ = new Array();
在脚本语言中,数组中的元素不必是同一种数据类型
let obj = [1, 'hello', false, null];
判断一个对象是否是数组
Array.isArray();
let num = 4;
let arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(num)); // false
读写数组
使用[ ]操作符将数据赋给数组
使用[ ]操作符读取数组中的元素
字符串生成数组
调用字符串对象的split()方法生成数组
let sentence = “The quick brown fox jumped over the lazy dog";
let words = sentence.split(" ");
数组整体性操作
将一个数组赋给另外一个数组,只是为被赋值的数组增加一个新的引用,这是浅复制
将原数组中的每一个元素都复制一份到新数组中,称为深复制
let nums = [];
for(let i = 0; i < 10; i++) {
nums[i] = i+1;
}
//浅复制
let sameNums = nums;
//深复制
function copy(arr1, arr2) {
for(let i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
}
let sameNums_ = [];
copy(nums, sameNums_);
存取函数
定义:用来访问数组元素的函数,这些函数返回目标数组的某种变体。
查找元素
//indexOf() 用来查找传进来的参数是否存在于目标数组
//如果数组中包含多个相同的元素,indexOf()总是返回第一个的索引,lastIndexOf()返回最后一个的索引
let names = ['Tom', 'Jerry'];
let index = names.indexOf('Tom'); // 0
let index_ = names.indexOf('Spike'); // -1
数组的字符串表示
//join() toString() 可以将数组转化为字符串 join()不传入参数,默认,隔开
let names = ['Tom', 'Jerry', 'Spike'];
let namestr = names.join(); // Tom,Jerry,Spike
let namestr_ = names.toString();// Tom,Jerry,Spike
由已有数组创建新数组
//contact() 合并多个数组创建一个新数组
//作为参数的数组,其所有元素都被连接到调用contact()方法的数组后面
let name = ['Tom', 'Jerry'];
let name_ = ['Spike'];
let names = name.contact(name_); // ['Tom', 'Jerry', 'Spike']
//splice() 截取一个数组的子集创建一个新数组
//第一个参数是截取的起始索引,第二个参数是截取的长度
let namesc_ = ['Tom', 'Jerry', 'Spike']
let namec = names_.splice(0,2); //['Tom', 'Jerry']
let namec_ = namsc_; // ['Spike']
可变函数
定义:不必引用数组中的某个元素,就能改变数组内容。
为数组添加元素
let nums = [2, 3, 4];
nums.push(5); // 将一个元素添加到数组末尾
nums.unshift(0, 1); // 将一个或多个元素添加到数组开头
//[0, 1, 2, 3, 4, 5]
从数组中删除元素
let nums = [0, 1, 2, 3, 4, 5]
nums.pop(); //将数组末尾元素删除
nums.shift(); //将数组第一个元素删除
//[1, 2, 3, 4]
//pop()和shift()方法都将删除的元素作为方法的返回值返回
从数组中间添加和删除元素
//splice()
//第一个参数:起始索引(希望开始添加元素的地方)
//第二个参数:需要删除的元素个数(添加元素时,该参数设为0)
//第三个参数:想要添加进数组的元素
let nums = [1, 2, 3, 7, 8, 12];
//添加元素的两种形式
let newEl = [4, 5, 6];
nums.splice(3, 0, newEl); //[1, 2, 3, 4, 5, 6, 7, 8, 12]
nums.splice(8, 0, 9,10,11); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
//删除元素
nums.splice(3, 3); //[1, 2, 3, 7, 8, 9, 10, 11, 12]
数组排序
//reverse() 将数组中元素的顺序进行翻转
let nums = [1, 2, 3, 4];
nums.reverse(); //[4, 3, 2, 1]
//sort() 对于元素为字符串类型,排序成功
let letters = ['b', 'd', 'c', 'a']
letters.sort(); // ['a', 'b', 'c', 'd']
//sort()方法按照字典顺序对元素进行排序的,即使元素是数字类型,会被认为是字符串类型
//调用sort()方法时传入一个比较大小的函数来对数字类型的元素进行排序
function compare(n1, n2) {
return n1-n2;
}
let num = [3, 1, 4, 2, 5];
num.sort(compare); //[1, 2, 3, 4, 5]
迭代器方法
对数组中的每个元素应用一个函数,可以返回一个值、一组值或者一个新数组
不生成新数组的迭代器方法
不产生任何新数组,要么对于数组中的每个元素执行某种操作,要么返回一个值
//1.forEach()方法,接受一个函数作为参数,对数组中的每个元素使用改函数
function square(num) {
console.log(num, num * num);
}
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
nums.forEach(square);
//2.every()方法,接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数
// 对于所有的元素,该函数均返回true,则该方法返回true
function isOdd(num) {
return num % 2 === 1;
}
let num_odd = [1, 3, 5, 7, 9];
let num_even = [2, 4, 6, 8, 10];
let nums_ = [1, 2, 4, 6, 8];
let odd = num_odd.every(isOdd); //true
let even = num_even.every(isOdd); //false
//some()方法接受一个返回值为布尔类型的函数,只要一个元素使该函数返回true,该方法就返回true
let someOdd = nums.some(isOdd); //true
let someOdd_ = num_even.some(isOdd); //false
//reduce()方法接受一个函数,返回一个值
// 该方法从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,直到最后一个元素,最后返回累加值
//reduceRight()与reduce()相似,执行方向相反
function add(runningTotal, currentValue) {
return runningTotal + currentValue;
}
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let sum = nums,reduce(add);// 55
生成新数组的迭代器方法
//map()方法接受一个函数,返回一个新的数组
function curve(grade) {
return grade += 5;
}
let grades = [0, 1, 2, 3, 4];
let newGrades = grades.map(curve); // [5, 6, 7, 8, 9]
//filter()方法传入一个返回值为布尔类型的函数,返回一个包含应用该函数后结果为true的元素的新数组
function isEven(num) {
return num % 2 === 0;
}
let nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let evens = nums.filter(isEven); //[0, 2, 4, 6, 8]
二维和多维数组
创建二维数组
Array.matrix = function(rows, cols, initial) {
let arr = [];
for(let i = 0; i < row; i++) {
let columns = [];
for(let j = 0; j < col; j++) {
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
}
let nums = Array.matrix(5, 5, 0);
let num = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]];
处理二维数组的元素
按列访问和按行访问,双层for循环
…未完待续
参考:数据结构与算法JavaScript描述