Javascript的array.reverse()工作原理是什么?它是否通过并交换数组的每个元素?如果是这样,是否需要O(n)来交换大小为n的数组?
我想我问的原因是因为我想知道是否array.reverse()与以下相同:
for(var i = 0; i < a.length / 2; i++) {
var holder = a[i];
a[i] = a[a.length - 1 - i];
a[a.length - 1 - i] = holder;
}
Run Code Online (Sandbox Code Playgroud)
注意:对不起,如果我发布的Javascript代码不正确,现在已经很晚了.
编辑:固定a.length为a.length / 2.
有关其工作原理的完整详细信息,请阅读规范的相关部分.这是算法:
设O是调用ToObject传递此值作为参数的结果.
- 设lenVal是用参数"length"调用O的[[Get]]内部方法的结果.
- 设len为ToUint32(lenVal).
- 让中间是下限(len/2).
- Letlower为0.
重复,而低≠中
- 让上限为len-lower -1.
- 设upperP为ToString(上).
- 让lowerP为ToString(更低).
- 设lowerValue是使用参数lowerP调用O的[[Get]]内部方法的结果.
- 设upperValue是使用参数upperP调用O的[[Get]]内部方法的结果.
- 让lowerExists是使用参数lowerP调用O的[[HasProperty]]内部方法的结果.
- 让upperExists是使用参数upperP调用O的[[HasProperty]]内部方法的结果.
如果lowerExists为true且upperExists为true,则
使用参数lowerP,upperValue和true调用O的[[Put]]内部方法.
- 使用参数upperP,lowerValue和true调用O的[[Put]]内部方法.
- 否则如果lowerExists为false且upperExists为true,那么
- 使用参数lowerP,upperValue和true调用O的[[Put]]内部方法.
- 调用O的[[Delete]]内部方法,参数upperP和true.
- 否则,如果lowerExists为true且upperExists为false,则
- 调用O的[[Delete]]内部方法,参数lowerP和true.
- 使用参数upperP,lowerValue和true调用O的[[Put]]内部方法.
- 另外,lowerExists和upperExists都是假的
- 无需任何操作.
- 增加1点.
- 返回O.
| 归档时间: |
|
| 查看次数: |
1836 次 |
| 最近记录: |