数组
创建和初始化数组
let daysOfWeek = new Array();
daysOfWeek = new Array(7);
daysOfWeek = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday');
let daysOfWeek = []
daysOfWeek.length
访问元素和迭代数组
for (let i = 0; i < daysOfWeek.length; i++) {
console.log(daysOfWeek[i]);
}
const fibonacci = [];
fibonacci[1] = 1;
fibonacci[2] = 1;
for (let i = 3; i < 20; i++) {
fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
}
for (let i = 1; i < fibonacci.length; i++) {
console.log(fibonacci[i]);
添加元素
在数组末尾插入元素
numbers[numbers.length] = 10;
numbers.push(11);
numbers.push(12, 13);
在数组开头插入元素
Array.prototype.insertFirstPosition = function (value) {
for (let i = this.length; i > 0; i--) {
this[i] = this[i - 1]
}
this[0] = value
}
unshift方法
-
把数值插入数组开头 逻辑与上相同
let b =[1,2,3] b.unshift(-1,-2) //返回数组长度5 b[-1, -2, 1, 2, 3]
删除元素
从数组末尾删除元素
numbers.pop()
从数组开头删除元素
for (let i = 0; i < numbers.length; i++) {
numbers[i] = numbers[i + 1];
}
numbers.length --
使用 shift 方法
numbers.shift();
在任意位置添加或删除元素
splice 方法
const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
console.log(months);
//['Jan', 'Feb', 'March', 'April', 'June']
months.splice(4, 1, 'May');
console.log(months)
//[ 'Jan', 'Feb', 'March', 'April', 'May' ]
let myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon']
let removed = myFish.splice(3, 1)
// myFish is ["angel", "clown", "drum", "sturgeon"]
let myFish = ['angel', 'clown', 'mandarin', 'sturgeon']
let removed = myFish.splice(2)
// myFish is ["angel", "clown"]
delete 方法
delete numbers[0]
numbres[0] = undefined
二维和多维数组
averageTemp[0] = [];
averageTemp[0][0] = 72;
averageTemp[0][1] = 75;
averageTemp[0][2] = 79;
averageTemp[0][3] = 79;
averageTemp[0][4] = 81;
averageTemp[0][5] = 81;
// day 2
averageTemp[1] = [];
averageTemp[1][0] = 81;
averageTemp[1][1] = 79;
averageTemp[1][2] = 75;
averageTemp[1][3] = 75;
averageTemp[1][4] = 73;
averageTemp[1][5] = 73;
迭代二维数组元素
function printMatrix(myMatrix) {
for (let i = 0; i < myMatrix.length; i++) {
for (let j = 0; j < myMatrix[i].length; j++) {
console.log(myMatrix[i][j]);
}
}
}
多维数组
const matrix3x3x3 = [];
for (let i = 0; i < 3; i++) {
matrix3x3x3[i] = []; // 我们需要初始化每个数组
for (let j = 0; j < 3; j++) {
matrix3x3x3[i][j] = [];
for (let z = 0; z < 3; z++) {
matrix3x3x3[i][j][z] = i + j + z;
}
}
}
for (let i = 0; i < matrix3x3x3.length; i++) {
for (let j = 0; j < matrix3x3x3[i].length; j++) {
for (let z = 0; z < matrix3x3x3[i][j].length; z++) {
console.log(matrix3x3x3[i][j][z]);
}
}
}
JavaScript的数组方法参考
数组合并
var ary1 = [1, 2, 3]
var ary2 = [5, 6]
console.log(ary1.concat(4, ary2))
//[ 1, 2, 3, 4, 5, 6 ]
函数迭代器
every
//测试一个数组内的所有元素是否都能通过某个指定函数的测试
const isEven = x => x % 2 === 0
numbers.every(isEven)
some
- 测试数组中是不是至少有1个元素通过了被提供的函数测试
ES6数组
for…of循环迭代
for (const n of numbers) {
console.log(n % 2 === 0 ? 'even' : 'odd');
}
使用@@iterator 对象
let iterator = numbers[Symbol.iterator]();
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
console.log(iterator.next().value); // 3
console.log(iterator.next().value); // 4
console.log(iterator.next().value); // 5
//不断调用迭代器的 next 方法,就能依次得到数组中的值。
//iterator.next().value 会返回 undefined。
数组的 entries、 keys 和 values 方法
let aEntries = numbers.entries(); // 得到键值对的迭代器
console.log(aEntries.next().value); // [0, 1] - 位置 0 的值为 1
console.log(aEntries.next().value); // [1, 2] - 位置 1 的值为 2
console.log(aEntries.next().value); // [2, 3] - 位置 2 的值为 3
//numbers 数组中都是数, key 是数组中的位置, value 是保存在数组索引的值。
aEntries = numbers.entries();
for (const n of aEntries) {
console.log(n);
}
const aKeys = numbers.keys(); // 得到数组索引的迭代器
console.log(aKeys.next()); // {value: 0, done: false }
console.log(aKeys.next()); // {value: 1, done: false }
console.log(aKeys.next()); // {value: 2, done: false }
//keys 方法会返回 numbers 数组的索引。一旦没有可迭代的值, aKeys.next()就会返回一个 value 属性为 undefined、 done 属性为 true 的对象。如果 done 属性的值为 false,就意味着还有可迭代的值。
const aValues = numbers.values();
console.log(aValues.next()); // {value: 1, done: false }
console.log(aValues.next()); // {value: 2, done: false }
console.log(aValues.next()); // {value: 3, done: false }
from方法
//Array.from 方法根据已有的数组创建一个新数组
let evens = Array.from(numbers, x => (x % 2 == 0));
Array.of方法
//创建新数组
let numbers4 = Array.of(1, 2, 3, 4, 5, 6)
//复制已有数组
let numbersCopy = Array.of(...numbers4)
fill方法
let numbersCopy = Array.of(1, 2, 3, 4, 5, 6)
numbersCopy.fill(0)
//[0, 0, 0, 0, 0, 0]
numbersCopy.fill(2, 1)
//[0, 2, 2, 2, 2, 2]
numbersCopy.fill(1, 3, 5) //num start end 不包含end
//[0, 2, 2, 1, 1, 2]
copyWithin 方法
//复制数组中的一系列元素到同一数组指定的起始位置
let copyArray = [1, 2, 3, 4, 5, 6]
copyArray.copyWithin(0, 3)
//[4, 5, 6, 4, 5, 6] 拷贝到0位置 从下标3开始
// 4、 5 两个值(在位置 3 和 4 上)复制到位置 1 和 2
copyArray = [1, 2, 3, 4, 5, 6];
copyArray.copyWithin(1, 3, 5);
//拷贝到下标1,从3开始 到5 不包含5
排列元素
numbers.reverse()
let ary = [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log(ary.sort())
// [
// 1, 10, 11, 12, 13, 14,
// 15, 2, 3, 4, 5, 6,
// 7, 8, 9
// ]
//sort方法 把元素默认成字符串比较
numbers.sort((a, b) => a - b)
names = ['Ana', 'ana', 'john', 'John']; // 不分大小写比较
console.log(names.sort((a, b) => {
if (a.toLowerCase() < b.toLowerCase()) {
return -1;
}
if (a.toLowerCase() > b.toLowerCase()) {
return 1;
}
return 0;
}))
- 希望小写字母排在前面,那么需要使用 localeCompare 方法
- 对带有重音符号的字符做排序的话,也可以用 localeCompare 来实现
搜索
console.log(numbers.indexOf(10))
console.log(numbers.lastIndexOf(10))
//超出范围返回-1
es6方法 find 和 findIndex
let numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
function multipleOf13(element, index, array) {
return (element % 13 == 0);
}
console.log(numbers.find(multipleOf13)); //没有返回undefined
console.log(numbers.findIndex(multipleOf13))//没有返回-1
es7 includes
console.log(numbers.includes(15))
//返回true或false
//includes 方法传入一个起始索引,搜索会从索引指定的位置开始
let numbers2 = [7,6,5,4,3,2,1];
console.log(numbers2.includes(4,5))
输出数组为字符串
//数组里所有元素输出为一个字符串
console.log(numbers.toString())
//用一个不同的分隔符(比如-)把元素隔开
const numbersString = numbers.join('-');
console.log(numbersString)
类型数组
-
用于存储单一类型的数据
let myArray = new TypedArray(length) // TypedArray 需替换为下表所列之一