RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 550976
Accepted
Rennorb
Rennorb
Asked:2020-08-02 05:10:07 +0000 UTC2020-08-02 05:10:07 +0000 UTC 2020-08-02 05:10:07 +0000 UTC

复制数组的值,而不是对它的引用

  • 772

你好!告诉我,我如何在 JavaScript 中复制一个数组,以便当副本发生变化时,原始数组不会发生变化?例如:

a = [0, 1, 2, 3]
b = clone(a)
b[0] = 10
a[0] == 0 // => true

是否可以实施这种方法clone?

javascript
  • 5 5 个回答
  • 10 Views

5 个回答

  • Voted
  1. Best Answer
    Алексей Шиманский
    2020-08-02T05:16:36Z2020-08-02T05:16:36Z

    var a = [0, 1, 2, 3]
    var b = a.slice(0);
    
    
    b[0] = 10;
    console.log('a: ' + a);
    console.log('b: ' + b);

    slice - 将数组的一部分的浅表副本返回到新的数组对象中。

    在这种情况下,从头到尾


    从技术上讲slice- 最快的方式,但是如果你添加它会更快0- 作为“切断”的开始

    myArray.slice(0);
    

    比...快

    myArray.slice();
    

    ....这就是方言所说的 %)

    • 11
  2. Qwertiy
    2020-08-02T07:25:55Z2020-08-02T07:25:55Z

    性能测量

    在 chromeslice(0)中,它确实比普通的slice()快一点,比concat. 但Array.from即使concaty 也会丢失 10 次 - 每百万次迭代 3 秒 o_O。

    但 Edge 并不这么认为——它concat是那里最快的。AArray.from仍然比concata - 1.4 秒慢 10 倍(有尾巴)。

    当您运行代码片段时,浏览器会挂起几秒钟——这是正常的。

    function test(f) {
      var a = [0, 1, 2, 3];
      var t = performance.now();
      f(a);
      t = performance.now() - t;
      console.log((""+f).match(/var b = .*$/m)[0] + " // " + t.toFixed(3) + " ms");
    }
    
    test(function testSlice(a) {
      for (var q=0; q<1000000; ++q) {
        var b = a.slice();
      }
    });
    
    test(function testSlice0(a) {
      for (var q=0; q<1000000; ++q) {
        var b = a.slice(0);
      }
    });
    
    test(function testConcat(a) {
      for (var q=0; q<1000000; ++q) {
        var b = [].concat(a);
      }
    });
    
    test(function testFrom(a) {
      for (var q=0; q<1000000; ++q) {
        var b = Array.from(a);
      }
    });
    
    test(function testAssign(a) { // Так делать не надо, просто для сравнения
      for (var q=0; q<1000000; ++q) {
        var b = Object.assign([], a);
      }
    });
    
    test(function testDesruct(a) {
      for (var q=0; q<1000000; ++q) {
        var b = [...a];
      }
    });

    • 7
  3. Aquinary
    2020-08-02T05:15:59Z2020-08-02T05:15:59Z
    var oldArray = [0, 1, 2, 3];
    var newArray = oldArray.slice();
    
    • 6
  4. Qwertiy
    2020-08-02T05:23:36Z2020-08-02T05:23:36Z

    var a = [0, 1, 2, 3]
    var b = [].concat(a)
    
    b[0] = 10
    
    console.log(a + '\n' + b)

    • 6
  5. ROBB STARK
    2020-06-30T18:54:53Z2020-06-30T18:54:53Z

    当数组或数组中有对象时也有效的方法:

    var a = [[1,1,1],[1,1,1],[1,2,1]]
    var b = JSON.parse(JSON.stringify(a))
    b[0][0]=5
    console.log(a)
    console.log(b)

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5