如何获取数组的每三个元素

13

我有一个数组,想要返回每隔三个元素作为一个新的数组(从0开始)。

例如:

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let newArr = [1, 4, 7];

这是我目前正在做的方法:

let newArr = [];
for(let x = 0; x < arr.length; x += 3) {
   newArr.push(arr[x]);
}
return newArr;

是否有一种方法可以使用arr.map来完成这个任务?还有更简单的方法吗?


.map() 不是一个好的选择,因为它被设计成返回一对一映射。不过你可以使用 .reduce() - Pointy
@Pointy 为什么我要在本质上是过滤器的情况下使用 reduce? - user663031
@torazaburo 当然,没错。我通常认为“过滤器”与列表中值的固有特性有关,但这可能只是我的问题 :) - Pointy
1个回答

16

你还可以使用filter进行操作。

let newArr = arr.filter((_,i) => i % 3 == 0); 

但是请记住,在某些情况下,使用基本的for循环比其他方法更有效率。


在表达式(_, i)中,_代表什么意思? - StepUp
1
@StepUp 那只是一个未使用的参数,这就是为什么我们在那里使用了下划线。那没有特殊的含义。 - Rajaprabhu Aravindasamy
1
如果你的数组很大,比如说有10,000个元素,使用filter不是最好的选择,因为你不想遍历10,000个元素,只需像问题中所做的那样使用for循环直接访问它们。 - Ahmad Karim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接