javascript(JS) 0基础快速入门 (四)(JS数组)

152 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

数组创建

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 ]