mas*_*by3 0 javascript arrays reverse
基本上标题说的是:我希望能够调用.map反向数组,但我担心它会太慢,因为我必须多次执行此操作。
我知道以下方法有效:
let arr = [1, 2, 3, 4, 5];
let rev_wrapped = arr.slice(0).reverse().map(item => `wrapped: ${item}`);
Run Code Online (Sandbox Code Playgroud)
结果rev_wrapped是:
[
'wrapped: 5',
'wrapped: 4',
'wrapped: 3',
'wrapped: 2',
'wrapped: 1'
]
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更快的方法来做到这一点,因为.reverse()完全反转数组,而我只需要以相反的顺序读取数据。
如果这是不可能的,我也可以使用一种数据结构,它允许我在开始时插入元素而无需太多的计算成本(因为类似的东西arr.splice(0,0,new_item)会在每次插入时完全重新排列数组)。
您当前的代码对数组进行了三遍(slice,进行复制;reverse,反转它;并map映射它)。如果性能是一个问题,并且您发现当前的方法太慢(我建议测量,而不是推测),那么您最好只使用一个简单的循环:
let arr = [1, 2, 3, 4, 5];
let rev_wrapped = new Array(arr.length);
for (let i = 0, n = arr.length - 1; n >= 0; --n, ++i) {
rev_wrapped[i] = `wrapped: ${arr[n]}`;
}
console.log(rev_wrapped);Run Code Online (Sandbox Code Playgroud)
这只是对数组进行了一次遍历。
通常,new Array是一种反模式,但在现代 JavaScript 引擎中new Array(5)通常会预先分配存储(这是我最近了解到的并且令我惊讶的事情)。