js 高程 Array

Array

跟其他语言中的数组一样,ECMAScript 数组也是一组有序的数据,但跟其他语言 不同的是,数组中每个槽位可以存储任意类型的数据。

这意味着可以创建一个数组,它的第一个元素 是字符串,第二个元素是数值,第三个是对象。ECMAScript 数组也是动态大小的,会随着数据添加而 自动增长。

创建数组

使用构造函数创建数组:

//1. 基本用法
let arr1 = new Array();//[]
//2. 设定数组长度
let arr2 = new Array(5);//[空 × 5]
//3. 设定数组内元素
let arr3 = new Array(1, 3, 5);//[1, 3, 5]

使用数组字面量方式创建:

let arr1 = [];
let arr2 = [1, 2];

ES6 from() 方式创建:from()用于将 类数组结构转换为数组实例

//1. 字符串会被拆成单个字符
Array.from("matt");//["m", "a", "t", "t"]
//2. 使用from()将集合和映射转换为一个新数组
const map = new Map().set(1, 2)
					 .set(3, 4);
const set = new Set().add(1)
					 .add(2)
					 .add(3)
					 .add(4);
Array.from(map);//[Array(2), Array(2)]
Array.from(set);//[1, 2, 3, 4]
//3. 对现有数组进行浅复制
let arr1 = [1, 2, 3, 4];
let arr2 = Array.from(arr1);
arr1 === arr2;//false
//4. 将任何可迭代对象转换为数组
const iter = {
    *[Symbol.iterator](){
        yield 1;
        yield 2;
        yield 3;
        yield 4;
    }
};
Array.from(iter);//[1, 2, 3, 4]
//5. 转换arguments对象
//6. 将某些带有必要属性的对象转换为数组,keys需要能够转换为数字,且具有length这一项
const obj = {
    0:1,
    1:2,
    2:3,
    length:3//必要属性
}
Array.from(obj);//[1, 2, 3]

let obj1 = {
    1:2,
    2:3,
    3:4,
    length:3
}
Array.from(obj1);//[undefined, 2, 3] 说明它会从0开始

let obj2 = {
    "a":2,
    "b":3,
    "c":4,
    length:3
}
Array.from(obj2);//[undefined, undefined, undefined]
//7. Array.from()还接收第二个可选的映射函数参数。这个函数可以直接增强新数组的值,而无须像调用 Array.from().map()那样先创建一个中间数组。
const a2 = Array.from([1, 2, 3, 4], x => x*2);//[2, 4, 6, 8]

ES6 of() 方式创建:of()用于将一组参数转换为数组实例

//用于替代 Array.prototype.slice.call(arguments),将 arguments 转换为数组
Array.of(1, 2, 3, 4)//[1, 2, 3, 4]

检测数组

经典的 ECMAScript 问题:判断一个对象是不是数组

  1. 只有一个网页时,使用instanceof就行。
let arr = [1, 2, 3];
arr instanceof Array;//true
  1. 若网页中有多个框架,可能会有不同的全局执行上下文,因此会有不同版本的Array构造函数,影响instanceof的判断

    ECMAScript 提供了 Array.isArray()方法。这个方法的目的就是确定一个值是 否为数组,而不用管它是在哪个全局执行上下文中创建的。

迭代器方法

ES6中,Array 的原型上暴露了 3 个用于检索数组内容的方法:keys()values()entries()可用用于拆分键值对

let arr = ["H", "e", "l", "l", "o"];
const arrKeys = Array.from(arr.keys());//[0, 1, 2, 3, 4]
const arrValues = Array.from(arr.values());//["H", "e", "l", "l", "o"]
const arrEntries = Array.from(arr.entries());//结果见下图
image-20210210051306212

使用解构拆分键值对:……这个谷歌浏览器好像没实现?

let arr = ["H", "e", "l", "l", "o"];
for(const [idx, element] of arr){
    console.log(idx, ":", element);
}

二维数组

//初始化二维数组
    var len = s.length;
    var arr = new Array(len);
    for(var i = 0;i<len;i++){
        arr[i] = [];
        for(var r = 0;r<len;r++){
            arr[i][r] = 0
        }
    }
原文地址:https://www.cnblogs.com/peekapoooo/p/14394888.html