从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