在索引处结束数组映射?

3

有没有可能只映射数组到特定的索引?

例如,假设我有以下内容:

var nums = [1, 2, 3, 4, 5];

我想将数组中的数字加起来,但仅限于前三个索引。是否可以传递参数给Array.map()以仅处理到给定的索引?还是只能使用for循环来实现?


2
你为什么要使用map()来求和?使用reduce()会更好。 - epascarello
对于像您的示例这样简单的内容,nums[0]+nums[1]+nums[2] 将是我的选择。对于更复杂的函数和更大的数组(以及子数组),您可能需要自己编写一个函数来使用简单的 for 循环进行迭代,以避免复制和不必要的迭代。 - Pointy
抱歉,我的意思是减少:( - MarksCode
这被标记为一个forEach问题的重复,建议使用break (https://dev59.com/EXE85IYBdhLWcg3wvGAR)。然而,如果在map中使用,将会出现“VM1292:1 Uncaught SyntaxError: Illegal break statement”的错误。我投票重新打开。 - Travis J
4个回答

16

只需要使用slice方法即可。

slice() 方法将从开始索引到结束索引(不包括结束索引)的部分浅拷贝到一个新的数组对象。原始数组不会被修改。

nums.slice(0,3).map(...);

这是一个不错的处理方式,但需要注意的是,.slice()会创建一个新的数组,并将元素复制到请求范围内。如果实际解决的问题涉及大型原始数组,并且实际范围也相当大,则使用简单的for循环比这种方式更昂贵。 - Pointy

2

按照定义,map() 方法会对数组中的每个元素都调用一次。详见此处的文档。因此,是的,你需要使用其他解决方案,如 for 循环。


1
你可以使用 slice() 方法来获取数组中特定索引前的元素。
nums.slice(0,3).map();

0

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