Array学习第二天

95 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

Array

Array.from()还可以接收第二个映射函数参数,还可以接收第三个可选参数,用于指定映射函数中this的值,但是这个重写的this值在箭头函数中不适合。

const t1 = [6,7,8];
const t2 = Array.from(t1, t => t**2);
const t3 = Array.from(t1, function(x) {return t**this.exponent}, {exponent: 2});
console.log(t2); [36, 49, 64]
console.log(t3); [36, 49, 64]

Array.from()可以把一组参数转换为数组。可以替代ES6中的Array.prototype.slice.call(arguments), 一种异常笨拙的将arguments对象转换为数组的写法:

console.log(Array.of(7, 8, 9)); // [7, 8, 9];
console.log(Array.of(undefined)); // [undefined]

数组空位

在数组字面量初始化数组时,可以使用一串逗号来创建空位(hole),用逗号隔开。

创建一个空位数组方法:

const study = [,,,]; // 创建包含 3 个元素的数组 
console.log(study.length); // 3
console.log(study); // [,,,] 

ES6 新增方法普遍将这 些空位当成存在的元素,只不过值为 undefined:

const options = [1,,,4];
for (const option of options) {
    console.log(option === undefined);
}
//输出结果为false,true,true,false

使用 ES6 的 Array.from()创建的包含 2 个空位的数组:

const a = Array.from([,,]);

for (const val of a) {

alert(val === undefined);

}
// 输出结果为true,true

console.log(Array.of(...[,,,,])); // [undefined, undefined, undefined, undefined]

ES6 之前的方法可能会忽略这个空位

const study = [1,,,,5];
// map()会跳过空位置
console.log(study.map(() => 6)); // [6, undefined, undefined, undefined, 6]
// join()视空位置为空字符串
console.log(study.join('-')); // "1----5"

数组索引

要取得或设置数组的值,需要使用中括号并提供相应值的数字索引,如下所示:

let study = ["web", "java", "python"]; // 定义一个字符串数组
console.log(study[0]); // 显示第一项
colors[2] = "math"; // 修改第三项
colors[3] = "javascript"; // 添加第四项

数组中元素的数量保存在 length 属性中,这个属性始终返回 0 或大于 0 的值,例如:

let study = ["web", "java", "python"]; // 创建一个包含 3 个字符串的数组
let types = []; // 创建一个空数组
console.log(study.length); // 3
console.log(types.length); // 0

数组 length 属性通过修改 length 属性,可以从数组末尾删除,例如:

let study = ["web", "java", "python"]; // 创建一个包含 3 个字符串的数组
study.length = 2;
console.log(study[2]); // undefined