相关疑难解决方法(0)

Javascript交换数组元素

有没有更简单的方法来交换数组中的两个元素?

var a = list[x], b = list[y];
list[y] = a;
list[x] = b;
Run Code Online (Sandbox Code Playgroud)

javascript arrays

199
推荐指数
16
解决办法
25万
查看次数

JavaScript数组的大O.

通过添加和删除项目,可以非常轻松地修改JavaScript中的数组.它有点掩盖了大多数语言数组是固定大小的事实,并且需要复杂的操作来调整大小.似乎JavaScript可以很容易地编写性能不佳的数组代码.这导致了一个问题:

在数组性能方面,我可以从JavaScript实现中获得什么样的性能(就大O时间复杂度而言)?

我假设所有合理的JavaScript实现至少具有以下大O.

  • 访问 - O(1)
  • 附加 - O(n)
  • 前期 - O(n)
  • 插入 - O(n)
  • 删除 - O(n)
  • 交换 - O(1)

JavaScript允许您使用new Array(length)语法将数组预填充到特定大小.(额外的问题:以这种方式创建一个数组O(1)或O(n))这更像是一个传统的数组,如果用作预先调整大小的数组,可以允许O(1)追加.如果添加了循环缓冲逻辑,则可以实现O(1)前置.如果使用动态扩展数组,则O(log n)将是这两者的平均情况.

对于某些事情,我可以期待比我的假设更好的表现吗?我不希望在任何规范中概述任何内容,但实际上可能是所有主要实现都在后台使用优化的数组.是否有动态扩展阵列或其他一些性能提升算法?

PS

我想知道这个的原因是因为我正在研究一些排序算法,其中大多数似乎假设在描述它们的整体大O时附加和删除是O(1)操作.

javascript arrays algorithm big-o time-complexity

97
推荐指数
2
解决办法
2万
查看次数

Typescript交换数组项

如何使用typescript交换两个元素

elements:elements[] =[];
elements.push(item1);
elements.push(item2);
elements.push(item3);
elements.push(item4);


elements[0] is item1 
elements[3] is item4
Run Code Online (Sandbox Code Playgroud)

我如何在打字稿中交换这些项目.我知道Javascript的方式,像这样:

*使用临时变量的javascript示例*

var tmp = elements[0];
elements[0] = elements[3];
elements[3] = tmp;
Run Code Online (Sandbox Code Playgroud)

但任何API中做同样的事情打字稿像 array.swap()

javascript typescript angular

5
推荐指数
1
解决办法
7738
查看次数

以功能方式交换两个数组元素

我试图在javascript中以函数方式交换数组中的2个元素(es6)

let arr = [1,2,3,4,5,6]
let result = swap(arr, 1, 2) // input: array, first element, second element
// result=[1,3,2,4,5,6]
Run Code Online (Sandbox Code Playgroud)

我能想到的唯一方法是:

const swap = (arr, a, b) => 
            arr.map( (curr,i) => i === a ? arr[b] : curr )
               .map( (curr,i) => i === b ? arr[a] : curr )
Run Code Online (Sandbox Code Playgroud)

但是这个代码在数组上运行了两次,根本不可读.有什么好的干净功能代码的建议吗?

谢谢.

javascript functional-programming

3
推荐指数
2
解决办法
3534
查看次数