哪种迭代数组和按地图更改元素的方法更有效?

Tim*_*çek 0 javascript arrays dictionary

我有一个关于 map 的问题。如您所知,通过使用 map,我们可以迭代数组并能够更改数组的元素。为此,有两种方法,我在下面列出了它们。哪种方法具有较低的复杂性和较高的性能?(在示例数组并不大,但想想现实世界,比如数组中有 500 个元素)

var numbers = [4, 9, 16, 25];
numbers=numbers.map(e=>{
 return e=e*2;
})
Run Code Online (Sandbox Code Playgroud)

在这种方法中,将每个返回值分配给当前数组。

numbers.map((e,a)=>{
  numbers[a]=e*2;
})
Run Code Online (Sandbox Code Playgroud)

在每次迭代中,我们需要按索引访问数组以查找元素,我认为这比上面的更糟糕,但我不确定。

T.J*_*der 5

map如果您不打算使用它创建的数组,请不要使用。如果您只想遍历数组,请使用循环forEach或类似方法。

无论您是否想要一个新数组,循环数组的最有效方法通常是for循环:

const numbers = [4, 9, 16, 25];
for (let i = 0, len = numbers.length; i < len; ++i) {
    numbers[i] = numbers[i] * 2;
}
Run Code Online (Sandbox Code Playgroud)

(或者它的几种变体中的任何一种。)

但是“最有效”在实际代码中不太可能真正重要,因此使用map(如果您想要一个新数组)或forEach(如果您不想要)之类的东西就可以了。map是该操作的惯用方式(创建一个新数组,其中包含以某种方式修改的先前数组中的条目)。

结论:

如果你想要一个新的数组,请随意使用 map,或创建一个空白数组并使用您的任何循环数组选项来循环原始数组并将条目添加到新数组

如果您不想要一个新数组,请不要使用map,使用您的任何选项来迭代原始数组,除了那些不给您索引的选项,并将更新后的值分配回条目。