本文已参与「新人创作礼」活动,一起开启掘金创作之路。
数组创建
var arr = new Array();
使用typeof 检查一个数组时,会返回object
向数组中添加元素
arr[0] = 10; arr[1] = 33;
使用 arr.length 会获得数组最大索引+1(数组的长度,元素的个数)
数组字面量创建数组
var arr = [1,2,3,4,5,6];
var arr2 = new Array(1,2,3); // 使用构造函数创建数组,添加的元素以参数传递
arr2 = new Array (10); // 创建一个长度为10 的数组
// 二维数组 arr = [[1,2,3],[2,3,4],[2,3,4]];
数组的四个方法
1、push()
- 该方法可以向数组的末尾添加一个或多个元素,并放回数组的长度
2、pop()
- 删除数组最后一个元素,并将被删除的元素作为返回值返回
3、unshift()
- 向数组开头添加一个或多个元素,并返回数组的长度
4、shift()
- 可以删除数组的第一个元素,并将被删除的元素作为返回值返回
数组的遍历
for (var i=0 ; i < arr.length ;i++){ console.log(arr[i]); }
forEach( )方法时js提供的遍历方法
- 需要一个函数作为参数
- forEach(function(item,index,arr){
- 回调函数由我们创造但不由我们调用
- 该方法会将遍历到的元素以实参的形式传递
- 我们可以定义形参来接受这些内容
- 第一个参数,就是正在遍历的元素
- 第二个参数,就是当前正在遍历的元素的索引
- 第三个参数,就是正在遍历的数组
- })
for in
let arr = [2,3,45,67,3]
for (let i in arr){
// i为arr数组的索引 0,1,2,3,4,5
}
for of
let arr = [1,2,33,2,4,5]{
for(let i of arr){
// i 为arr数组的每一项 1,2,33,2,4,5
}
}
数组的三个高阶函数及其他方法
filter
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
语法:
let newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
参数:
-
callback用来测试数组的每个元素的函数。返回
true表示该元素通过测试,保留该元素,false则不保留。它接受以下三个参数:element数组中当前正在处理的元素。
index可选正在处理的元素在数组中的索引。
array可选调用了
filter的数组本身。 -
thisArg可选执行
callback时,用于this的值。
示例:
过滤掉重复的元素
let arr = [1,2,3,3,4,4,5,5]
arr = arr.filter((item,index)=> arr.indexOf(item) === index)
console.log(arr) // [1,2,3,4,5]
map
map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
语法跟参数同filter
示例:
const array1 = [1, 4, 9, 16];
// 数组里的每个元素 * 2 并且返回新数组里
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
reduce
reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
语法:
arr.reduce((accumulator, currentValue[, index[, array]])=>{}[, initialValue])
参数:
-
accumulator累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或
initialValue(见于下方)。currentValue数组中正在处理的元素。
index可选数组中正在处理的当前元素的索引。 如果提供了
initialValue,则起始索引号为0,否则从索引1起始。array可选调用
reduce()的数组 -
initialValue可选作为第一次调用
callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。
示例:
将二维数组转化为一维
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
( acc, cur ) => acc.concat(cur),[]);
//[0, 1, 2, 3, 4, 5]
数组里的所有值求和
let arr = [1,2,3,4,5,6].reduce((pre,cur)=>pre+cur,0)
// 21
计算数组中每个元素出现的次数
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var countedNames = names.reduce(function (allNames, name) {
if (name in allNames) {
allNames[name]++;
}
else {
allNames[name] = 1;
}
return allNames;
}, {});
// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
find
find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
// expected output: 12
Array.from()
Array.from() 方法对一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
示例:
将字符串转为数组
Array.from('foo');
// [ "f", "o", "o" ]
将 可迭代的对象 转生成数组(set、map)
const set = new Set(['foo', 'bar', 'baz', 'foo']);
Array.from(set);
// [ "foo", "bar", "baz" ]
/*----------------------------------------- Map ---------------------------------------------------------------*/
const map = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(map);
// [[1, 2], [2, 4], [4, 8]]
const mapper = new Map([['1', 'a'], ['2', 'b']]);
Array.from(mapper.values());
mapper.values() // map {'a','b'}
// ['a', 'b'];
mapper.keys() // map {'1','2'}
Array.from(mapper.keys());
// ['1', '2'];
从类数组对象(arguments)生成数组
function f() {
return Array.from(arguments);
}
f(1, 2, 3);
// [ 1, 2, 3 ]