JavaScript -- array类型

176 阅读5分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

array我认为是JavaScript中最常用的类型,最近刚好在看JavaScript红宝书,所以来总结一下相关方法。

创建数组

有两种方法创建数组。

使用array构造函数

let array = new Array();
let array2 = new Array(3); // length = 3
let array3 = new Array("3"); // ["3"] length = 1
let array3 = new Array(1,2,3);[1,2,3]
let array4 = new Array("1","2","3"); //["1","2","3"]

如果只给构造函数传入一个数值,这个数值就会被自动设置为数组的length属性的属性值。 如果给构造函数传入一个其他类型的值,那么就会差创建一个length为1的只包含该值得数组。

使用数组字面量表示法

数组字面量:在中括号中包含以逗号分隔的元素列表。

let codes = ["a","b","c"]; //包含3个元素
let emp = []; // 空数组
let values = [1,2,] // 包含2个元素

ES6新增创建数组方法

from()

from方法用于累数组结构转换为数组实例。

of()

of方法将一组参数转换为数组实例。

迭代器方法

在ES6中,array的原型上暴露了三个用于检索数组内容的方法:keys()values()entries()

  • keys()返回数组索引的迭代器;
  • values()返回数组元素的迭代器;
  • entries()返回索引/值 键值对的迭代器。

迭代器是用于遍历数据结构元素的指针(如数据库中的游标)Iterator 和 for...of 循环

 const a = ["foo", "bar", "baz", "qux"];
 const keys = Array.from(a.keys());
 const values = Array.from(a.values());
 const entries = Array.from(a.entries());

 console.log(keys); //  [0, 1, 2, 3]
 console.log(values); //  ['foo', 'bar', 'baz', 'qux']
 console.log(entries); // [[0,"foo"],[1,"bar"],[2,"baz"],[3,"qux"]]

第三个例子要注意,输出的是一个数组嵌入了数组。(因为每个子数组是键值对)。

使用ES6的解构可以非常容易得在循环中拆分键值对:(利用iterator迭代器)

for (const [index, value] of a.entries()) {
     console.log(index);
     console.log(value);
 }
 
 // 0
 // foo
 // 1
 // bar
 // 2
 // baz
 // 3
 // qux

复制和填充方法(ES6新增)

这两个方法都需要指定数组实例上的一个范围,包括开始索引,但是不包括结束索引。

批量复制方法 -- copeWithin()

作用:按照指定范围浅复制数组中的部分内容,然后将他们插入到指定索引开始的位置。
结构:copeWithin(被插入索引,复制开始索引,复制结束索引)

  let ints;
        
  var reset = function () {
      ints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  }
  reset();

  // 从ints中复制索引0开始的内容,插入到索引5开始的位置
  ints.copyWithin(5);
  console.log(ints); // [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

  reset();
  // 从ints中复制索引5开始的内容,插入到索引0开始的位置
  ints.copyWithin(0, 5);
  onsole.log(ints); // [5, 6, 7, 8, 9, 5, 6, 7, 8, 9]

  reset();
  // 从ints中复制索引0开始到索引3结束的内容(包括索引3对应的值)
  // 插入到索引4开始的位置
  ints.copyWithin(4, 0, 3); // [0, 1, 2, 3, 0, 1, 2, 7, 8, 9]
  console.log(ints);

填充数组方法 -- fill()

作用:向数组中插入全部或部分相同的值。
结构:fill(填充值,起始索引,结束索引)

 const zeroes = [0, 0, 0, 0, 0];

 // 用5填充整个数组
 zeroes.fill(5);
 console.log(zeroes); // [5, 5, 5, 5, 5]
 
 // 用4填充索引大于等于3的元素
 zeroes.fill(5, 3);
 console.log(zeroes); // [0, 0, 0, 5, 5]

 // 用3填充索引大于等于1且小于3的元素(这里一定要注意,不包括结束索引)
 zeroes.fill(3, 1, 3);
 console.log(zeroes); // [0, 3, 3, 0, 0]

转换方法

valueOf()

作用:返回数组本身

 let people = ["边江", "姜广涛", "吴磊"];
 console.log(people.valueOf()); // ['边江', '姜广涛', '吴磊']

toString()

作用:数组转换成字符串 alert() 会默认调用toString()方法。

 let people = ["边江", "姜广涛", "吴磊"];
 console.log(people.toString()); // 边江,姜广涛,吴磊

toLocalString()

作用:得到逗号分割的数组值的字符串。

join()

作用:使用指定分隔符返回分隔符分割数组值的字符串。

let people = ["边江", "姜广涛", "吴磊"];
console.log(people.join("||")); // 边江||姜广涛||吴磊

栈方法

:一种后进先出(LIFO,Last-In-First-Out)结构。也就是最后添加的项最先被删除。 栈顶:数据项的插入(或称为推入,push)和删除(或称为删除,pop)只在栈顶发生。

push()

作用:接收任意数量的参数,并将他们添加到数组末尾,返回数组长度。(push有返回值)

 let names = [];
 let len = names.push("锦鲤", "李兰陵");
 console.log(len); // 2
 console.log(names); // ['锦鲤', '李兰陵']

pop()

作用:删除数组的最后一项,返回被删除的项(pop有返回值)

 names = ["锦鲤","李兰陵","胡良伟"];
 let item = names.pop();
 console.log(item); // 胡良伟

队列方法

队列:先进先出(FIFO,First-In-First-Out)的结构。
队列在列表末尾添加数据,但从列表开头获取数据。

shift()

作用:删除数组的第一项并返回该项,同时数组长度减1。

 let name = ['锦鲤', '李兰陵', "林予曦"];
 let item = name.shift();
 console.log(item); // 锦鲤
 console.log(name); //  ['李兰陵', '林予曦']

unshift()

作用:在数组开头添加任意数量的值,同时返回数组长度。

 let name = [];
 len = name.unshift("锦鲤", "李兰陵", "林予曦");
 console.log(len); // 3
 console.log(name); // ['锦鲤', '李兰陵', '林予曦']

操作方法

concat()

作用:在以前的数组基础上添加新元素。(类似于连接)

 let name = ["歪歪", "谷江山", "苏尚卿"];
 let names = name.concat("刘琮", ["阿杰", "金弦"]);
 console.log(names); // ['歪歪', '谷江山', '苏尚卿', '刘琮', '阿杰', '金弦']

slice()

作用:根据参数返回一个原有数组的子数组。

  • 如果只有一个参数,则slice()返回该索引到数组末尾的所有元素;
  • 如果是两个参数,则slice()会返回从开始us噢因到结束索引对应的所有元素,其中不包含结束索引对应的元素。
 let names = ['歪歪', '谷江山', '苏尚卿', '刘琮', '阿杰', '金弦'];
 let a1 = names.slice(2); // ['苏尚卿', '刘琮', '阿杰', '金弦']
 let a2 = names.slice(2, 4); //  ['苏尚卿', '刘琮']
 console.log(a1);
 console.log(a2);

splice()

作用:在数组中插入元素。

  • 如果有两个参数,则参数分别对应要删除的第一个元素的位置要删除的元素数量
  • 如果有三个及以上的参数,开始位置要删除元素的数量要插入的元素。 返回被删除的元素组成的数组
 let names = ['歪歪', '谷江山', '苏尚卿', '刘琮', '阿杰', '金弦'];

 let re1 = names.splice(0, 1);
 console.log(re1); // ['歪歪']

 let re2 = names.splice(0, 0, "歪歪");
 console.log(re2); // []
 console.log(names);

 let re3 = names.splice(2, 1, "张思王之", "风袖");
 console.log(re3); // ["苏尚卿"]
 console.log(names); // ['歪歪', '谷江山', '张思王之', '风袖', '刘琮', '阿杰', '金弦']