JavaScript数据结构与算法——数组

150 阅读3分钟

1.定义

数组是按次序排列的一组值。数组属于一种特殊的对象,键名为0,1,2,3...
length属性返回数组的成员数量。 

2.创建和初始化

let daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday'];
let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

3.一些方法

(1)添加元素

push()方法可向数组末尾添加一个或多个元素,并返回新的长度。

numbers.push(11);

unshift()方法可向数组开头添加一个或多个元素,并返回新的长度。

numbers.unshift(-2);

(2)删除元素

pop()方法可以删除并返回数组的最后一个元素。

numbers.pop();

shift()方法可以删除并返回数组的第一个元素。

numbers.shift();

(3)在任意位置添加或删除元素

splice(index,howmany,item1,...itemX)方法可从数组指定位置添加/删除元素,返回被删除的元素的数组

numbers.splice(5,3);

numbers.splice(5, 0, 2, 3, 4);

(4)其它数组方法

合并数组

concat 连接2个或更多数组,并返回结果(可以)

let numbers = negativeNumbers.concat(zero, positiveNumbers);

迭代器函数(迭代数组中的元素)

every 对数组中的每个元素运行给定函数,如果该函数对每个元素都返回true,则返回true

numbers.every(isEven);

some 对数组的每个元素运行给定函数,如果任一元素返回true,则返回true

numbers.some(isEven);

forEach 对数组中的每个元素运行给定函数,没有返回值

numbers.forEach(x => console.log(x % 2 === 0));

map 对数组中的每个元素运行给定函数,返回每次函数调用的结果组成的数组

const myMap = numbers.map(isEven);

filter 对数组中的每个元素运行给定函数,返回该函数会返回true的元素组成的数组

const evenNumbers = numbers.filter(isEven);

reduce 接收一个函数作为累加器,数组元素从左到右执行函数,最终计算为一个值并返回

let sum = numbers.reduce((previous, current,index,array) => previous + current);

indexOf 返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1

console.log(numbers.indexOf(10));

lastIndexOf 返回在数组中搜索到的与给定参数相等的元素的索引里最大的值

console.log(numbers.lastIndexOf(10));

reverse 颠倒数组中元素的顺序

numbers.reverse();

sort 按照字母顺序对数组排序,可以传入指定排序方法的函数作为参数

numbers.sort(); numbers.sort((a, b) => a - b);

toString 将数组作为字符串返回

console.log(numbers.toString());

join 将所有的数组元素连接成一个字符串

const numbersString = numbers.join('-');

slice 传入索引值,将数组里对应索引范围内的元素作为新数组返回

valueOf 和toString类似,将数组作为字符串返回

(5)新增数组方法

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);

copyWithin 复制数组总一系列元素到同一数组指定的起始位置

numbers.copyWithin(0, 3);

numbers.copyWithin(1, 3, 5);

includes 如果数组中存在某个元素则返回true,否则返回false

console.log(numbers.includes(20));

console.log(numbers.includes(5,9));

find 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素

console.log(numbers.find(multipleOf13));

findIndex 根据回调函数给定的条件从数组中查找元素,如果找到则返回该元素在数组中的索引

console.log(numbers.findIndex(multipleOf13));

fill 用静态值填充数组

numbersCopy.fill(0);

entries 返回包含数组所有键值对的@@iterator

keys 返回包含数组所有索引的@@iterator

values 返回包含数组中所有值的@@iterator

let aEntries = numbers.entries();

for (const n of aEntries) { console.log(n); }

const aKeys = numbers.keys();

console.log(aKeys.next());

const aValues = numbers.values();

console.log(aValues.next());

from 根据已有数组创建一个新数组

let numbers2 = Array.from(numbers);

let evens = Array.from(numbers, x => x % 2 == 0);

of 根据传入的参数创建一个新数组,和[]一样