Js中我们可以怎样去创建数组呢?

195 阅读1分钟

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

前言

今天遇到一枚手写题,如下:

// JS-笔试题 数组元素位置循环左右移动

function move(arr, n) {

  // TODO

}
var arr = [0, 1, 2, 3, 4, 5];
console.log(move(arr, -2)); // [1, 2, 3, 4, 5, 0]
console.log(move(arr, -1)); // [2, 3, 4, 5, 0, 1]
console.log(move(arr, 1)); // [5, 0, 1, 2, 3, 4]
console.log(move(arr, 2)); // [4, 5, 0, 1, 2, 3]
console.log(move(arr, 3)); // [3, 4, 5, 0, 1, 2]

脑海中瞬间闪现,slice、splice、pop、shift... 然后下手尝试,终以

function move(arr, n) {
  let newArr = [
    ...arr.slice(-n, arr.length),
    ...arr.slice(0, n > 0 ? arr.length - n : -n),
  ];
  return newArr;
}

得以解决。 顺手翻阅了一下slice的MDN

slice 方法可以用来将一个类数组(Array-like)对象/集合转换成一个新数组 还有这操作?那我们一般都如何去创建数组呢?

构造函数创建

new Array(3)

数组字面量创建

const names = ['Grey','Shelly','John']

要注意的是,与对象一样,在使用数组字面量表示法创建数组时不会调用Array构造函数

静态方法创建

这里有两种方式

  • Array.from()

从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。

//当输入第二个参数时,可对现有数组进行增强
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]
  • Array.of()

创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。

它的兼容就环境一栏赫然写着:

if (!Array.of) {
  Array.of = function() {
    return Array.prototype.slice.call(arguments);
  };
}

原来这是slice其中一个用法的平替。