Skip to content

从JavaScript数组的开头或结尾获取N个元素

在使用数组时,一个非常常见的场景是从数组的开头或结尾获取一部分元素。根据使用情况和期望的结果,有几种变体的操作可能适合您的需求。

获取数组的前N个元素

首先简单起见,您可能想要获取数组的前N个元素。使用Array.prototype.slice(),您可以通过将0作为起始索引和n作为结束索引来轻松实现这一点。

const take = (arr, n = 1) => arr.slice(0, n);

take([1, 2, 3], 0); // []
take([1, 2, 3], 2); // [1, 2]
take([1, 2, 3], 5); // [1, 2, 3]

从这些示例中可以看出,Array.prototype.slice()足够灵活,可以处理远远超出数组长度的n值。这意味着如果Array.prototype.length的值小于或等于n,则将检索数组中的所有元素。

负值有点奇怪,因为您最终会获取从0到倒数第n个元素之间的所有值。如果您想避免这种行为,可以简单地添加一些代码来验证n是否大于或等于0,否则抛出错误。

获取数组的后N个元素

获取数组的后N个元素非常类似。只需将负索引传递给Array.prototype.slice()即可实现这一点。

const takeRight = (arr, n = 1) => {
  if (n < 0) {
    throw new Error('Invalid value for n');
  }
  return n === 0 ? [] : arr.slice(-n);
};

takeRight([1, 2, 3], 2); // [2, 3]
takeRight([1, 2, 3], 0); // []
takeRight([1, 2, 3], 5); // [1, 2, 3]
takeRight([1, 2, 3], -1); // Error: Invalid value for n