饥人谷技术博客

JS 基础之数组

2019-04-13  本文已影响35人  养乐多__

一、数组

1. 定义
var arr = ['a', 'b', 'c'];
2. 数组的本质

本质:数组属于一种特殊的对象。typeof 运算符返回数组的类型是 object.
特殊性:数组的键名是按次序排列的一组整数(0,1,2…)

var arr = ['a', 'b', 'c'];
arr['0'] // 'a'
arr[0] // 'a'
3. length 属性
var arr = ['a', 'b', 'c'];
length.arry   // 3

arr[9] = 'e';
arr.length // 10
var arr = [ 'a', 'b', 'c' ];
arr.length // 3

arr.length = 4
arr[3]   //undefined
arr.length = 2;
arr // ["a", "b"]
arr.length = 0;
arr // []
var a = [];

a['p'] = 'abc';
a.length // 0
a[2.1] = 'abc';
a.length // 0
4. in 运算符
var arr = [];
arr[100] = 'a';

100 in arr // true
1 in arr // false
5. 遍历数组
var colors = ['red', 'green', 'blue'];
colors.forEach(function (color) {
  console.log(color);
});
// red
// green
// blue
6. 数组的空位
var a = [1, , 1];
a.length // 3
a[1]   // undefined

delete a[2];
a.length // 3
7. 类似数组的对象

对象的所有键名都是正整数或零,并且有 length 属性,语法上称为“类似数组的对象”(array-like object):

var obj = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
};
arrayLike instanceof Array   // false

二、Array 对象

1. 构造函数

Array 是 JavaScript 的全局对象,同时是构造数组的一个构造函数。

  1. 基本用法,以下三种写法都可以:
let f = new Array('a,' 'b')
let f = Array('a,' 'b')
let f = ['a', 'b']  // 常用方法
f // ["a", "b"]

对于基本类型 Number、String 和 Boolean,构造函数时不加 new 创建的的是对应的基本类型,加 new 创建的是对象;对于复杂类型 Object(包括 Array 和 Function),加与不加 new 创建的都是对象。

  1. 创建空数组:
var a = new Array(3)
a  // [empty * 3]
a.length   // 3
Array 构造函数的参数 3,表示生成一个长度为 3 的数组,每个位置都是空值: 创建数组
  1. 不一致性
var a = new Array(3, 3)
// [3, 3]
上面的例子,第一个参数不再指数组的长度,说明 Array 作为构造函数具有不一致性。内存图解: 不一致性
2. JS 中数组的本质
  1. 我们对数组的理解:数组就是数据的有序集合。
    JS 对数组的理解:数组就是原型链中有 Array.prototype 的对象。
  1. Array 与 Object 的区别
var a = [1,2,3]
var obj = {0:1, 1:2, 2:3, length:3}
二者的内存是没有区别的,它们的区别是原型不同。内存图解: Array 与 Object 的区别
3. 伪数组
4. 数组的 API

API:浏览器提供的接口。

  1. Array.prototype.forEach:遍历
arr.forEach( function(){} ) 
forEach()
  1. Array.prototype.sort:排序
    sort() 方法的内置排序一般是快排。排序后,原数组被改变
    默认按照字典顺序排序,若想自定义排序,可传入一个函数作为参数。
    sort()
  1. Array.prototype.join:连接数组成员为字符串
    join() 方法以指定参数作为分隔符,将所有数组成员连接成一个字符串。
    如果不提供参数,默认用逗号分隔。

    join()
  2. Array.prototype.concat:合并多个数组
    concat() 方法用于多个数组的合并。将新数组的成员添加到原数组成员的后部,然后返回一个新数组,原数组不变。

    concat()
  1. Array.prototype.map:映射
  1. Array.prototype.filter:过滤
  1. Array.prototype.reduce
    reduce() 方法从左到右依次处理数组的每个成员(从第一个成员到最后一个成员),最终累计为一个值。
    reduce() 上面代码中,reduce 方法求出数组所有成员的和。第一个参数是一个函数,sum 为之前求和的结果,n 为当前数字,最后一个参数 0 是初始值。
  1. Array.prototype.reverse:颠倒
    reverse() 方法用于颠倒排列数组元素,返回改变后的数组。该方法会改变原数组

    reverse()
  2. Array.prototype.slice:提取

arr.slice(start, end)
  1. Array.prototype.splice:删除
arr.splice(start, count, addElement1, addElement2, ...)
  1. 例题:var a = [1,2,3,4,5,6,7,8,9],计算所有奇数的和。
var a = [1,2,3,4,5,6,7,8,9]
a.reduce(function(arr, n){
    if(n % 2 !== 0){
        arr.push(n)
    }
    return arr
},[]).reduce(function(sum, n){
    return sum + n
},0)

// 或者
a.reduce( (sum,n)=> {
    return n%2===1 ? sum + n : sum
}, 0)
上一篇下一篇

猜你喜欢

热点阅读