最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 在 JavaScript 中复制数组的 14 个技巧 - 掘金

    正文概述 掘金(coderwxf)   2021-11-11   718

    因为缺乏对 JavaScript 如何处理数组及其数组元素的理解,数组复制过程经常被误解。JavaScript中的数组是可变的,这意味着在一个数组被创建后,它的内容可以被修改。

    这意味着要复制数组,我们不能简单地将旧数组分配给一个新的数组变量。如果我们这样做,它们将共享同一个引用,在改变一个变量后,另一个变量也会受到影响。这就是为什么我们需要克隆数组的原因。

    下面是一些关于我们如何克隆数组的有趣方法和技巧。

    选项 1 - 使用 Array.slice 方法

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = numbers.slice();
    copy.push(6); // 增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 2 - 使用 Array.map 方法

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = numbers.map(num => num);
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 3 - 使用 Array.from 方法

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = Array.from(new Set(numbers));
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 4 - 使用扩展运算符

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = [...numbers];
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 5 - 将 Array.of 方法与扩展运算符一起使用

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = Array.of(...numbers);
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 6 - 使用带有扩展运算符的数组构造函数

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = new Array(...numbers);
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 7 - 使用解构

    const numbers = [1, 2, 3, 4, 5];
    
    const [...copy] = numbers;
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 8 - 使用 Array.concat 方法

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = numbers.concat();
    copy.push(6); // 增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 9 - 将 Array.push 方法与扩展运算符一起使用

    const numbers = [1, 2, 3, 4, 5];
    
    let copy = [];
    copy.push(...numbers);
    copy.push(6); // 增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 10 - 将 Array.unshift 方法与扩展运算符一起使用

    const numbers = [1, 2, 3, 4, 5];
    
    let copy = [];
    copy.unshift(...numbers);
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 11 - 使用 Array.forEach 方法

    const numbers = [1, 2, 3, 4, 5];
    
    let copy = [];
    numbers.forEach((value) => copy.push(value));
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 12 - 使用 for 循环

    const numbers = [1, 2, 3, 4, 5];
    
    let copy = [];
    for (let i = 0; i < numbers.length; i++) {
        copy.push(numbers[i]);
    }
    copy.push(6); //  增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 13 - 使用 Array.reduce

    const numbers = [1, 2, 3, 4, 5];
    
    const copy = numbers.reduce((acc, x) => { acc.push(x); return acc; }, []);
    copy.push(6); // 增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    选项 14 - 一种怀旧的方式 - 使用 apply 方法

    const numbers = [1, 2, 3, 4, 5];
    
    let copy = [];
    Array.prototype.push.apply(copy, numbers);
    copy.push(6); // 增加一个新项,以证明我们不会修改原来的数组。
    
    console.log(copy);
    console.log(numbers);
    
    // 输出
    // [1, 2, 3, 4, 5, 6]
    // [1, 2, 3, 4, 5]
    

    感谢您的阅读,我们下一篇文章再见。


    下载网 » 在 JavaScript 中复制数组的 14 个技巧 - 掘金

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元