【问题标题】:Is swapping variables by array destructuring efficient?通过数组解构交换变量是否有效?
【发布时间】:2017-04-18 01:02:04
【问题描述】:

ES6 支持数组解构,它可以用来以如下简洁的语法交换变量,但是这在性能敏感代码中是否有效并建议作为数组处理?因为似乎需要一个新的临时数组来完成这个操作。

[a, b] = [b, a]

【问题讨论】:

  • 你可能会得到一些评估信息from the specification
  • @Li357 规格未详述性能
  • @Bergi 我正在解决“似乎需要一个新的临时数组来完成此操作”的问题。

标签: ecmascript-6 processing-efficiency


【解决方案1】:

让我们测试一下!

let a = 42
let b = 69

console.log("for 2000000 iterations");

console.time("deconstruct")
for(let i=2000000; i>=0; --i)
  [a, b] = [b, a];
console.timeEnd("deconstruct")

console.time("classical")
for(let i=2000000; i>=0; --i) {
  let tmp = a
  a = b
  b = tmp
}
console.timeEnd("classical")

所以这似乎不是更好的方法。

【讨论】:

  • 你在哪个浏览器中得到了什么结果?
  • 啊?它适用于 Firefox 57 和 Chrome;我得到for 2000000 iterations - deconstruct: 22.460ms - classical: 3.980ms - function: 1.580ms。实际上是 ES6 箭头函数语法
  • 您是否尝试过使用“函数”语法实际交换两个值?当然它不会抛出错误,但它没有预期的结果
  • 哼..你说得对,我没想到会这样哈哈。让我们删除这个案例..
  • 我让你自己运行测试,得出你自己的结论:)
猜你喜欢
  • 2017-07-22
  • 2019-07-05
  • 1970-01-01
  • 2019-04-25
  • 2018-04-25
  • 2023-03-10
  • 1970-01-01
  • 2019-09-10
  • 2020-09-15
相关资源
最近更新 更多