DSA__JS 学习随笔--数组

数组(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描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值