From d6cfdeb4be02a3e73014c2a8bd96494e25d3d677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=BD=A3=E1=BD=BB=E1=BD=A4?= Date: Wed, 14 Aug 2024 19:28:40 +0800 Subject: [PATCH] --- ...230\351\207\221 (2024_8_14 19_28_28).html" | 494 ++++++++++++++++++ 1 file changed, 494 insertions(+) create mode 100644 "JS\343\200\220\346\225\260\347\273\204\345\220\210\345\271\266\343\200\221\347\232\204\346\200\247\350\203\275\345\267\256\345\274\202\345\257\271\346\257\224\346\225\260\347\273\204\345\220\210\345\271\266\345\217\257\344\273\245\350\257\264\346\230\257\346\210\221\344\273\254\345\234\250\346\223\215\344\275\234\346\225\260\347\273\204\344\270\255\346\234\200\345\270\270\351\201\207\345\210\260\347\232\204\345\234\272\346\231\257\344\271\213\344\270\200\357\274\201 \346\234\254\347\257\207\345\260\206\347\256\200\350\246\201\345\210\206\346\236\220\344\270\211\347\247\215\346\225\260\347\273\204\345\220\210\345\271\266\347\232\204\346\226\271\346\263\225\357\274\214\345\271\266 - \346\216\230\351\207\221 (2024_8_14 19_28_28).html" diff --git "a/JS\343\200\220\346\225\260\347\273\204\345\220\210\345\271\266\343\200\221\347\232\204\346\200\247\350\203\275\345\267\256\345\274\202\345\257\271\346\257\224\346\225\260\347\273\204\345\220\210\345\271\266\345\217\257\344\273\245\350\257\264\346\230\257\346\210\221\344\273\254\345\234\250\346\223\215\344\275\234\346\225\260\347\273\204\344\270\255\346\234\200\345\270\270\351\201\207\345\210\260\347\232\204\345\234\272\346\231\257\344\271\213\344\270\200\357\274\201 \346\234\254\347\257\207\345\260\206\347\256\200\350\246\201\345\210\206\346\236\220\344\270\211\347\247\215\346\225\260\347\273\204\345\220\210\345\271\266\347\232\204\346\226\271\346\263\225\357\274\214\345\271\266 - \346\216\230\351\207\221 (2024_8_14 19_28_28).html" "b/JS\343\200\220\346\225\260\347\273\204\345\220\210\345\271\266\343\200\221\347\232\204\346\200\247\350\203\275\345\267\256\345\274\202\345\257\271\346\257\224\346\225\260\347\273\204\345\220\210\345\271\266\345\217\257\344\273\245\350\257\264\346\230\257\346\210\221\344\273\254\345\234\250\346\223\215\344\275\234\346\225\260\347\273\204\344\270\255\346\234\200\345\270\270\351\201\207\345\210\260\347\232\204\345\234\272\346\231\257\344\271\213\344\270\200\357\274\201 \346\234\254\347\257\207\345\260\206\347\256\200\350\246\201\345\210\206\346\236\220\344\270\211\347\247\215\346\225\260\347\273\204\345\220\210\345\271\266\347\232\204\346\226\271\346\263\225\357\274\214\345\271\266 - \346\216\230\351\207\221 (2024_8_14 19_28_28).html" new file mode 100644 index 0000000..c9570c2 --- /dev/null +++ "b/JS\343\200\220\346\225\260\347\273\204\345\220\210\345\271\266\343\200\221\347\232\204\346\200\247\350\203\275\345\267\256\345\274\202\345\257\271\346\257\224\346\225\260\347\273\204\345\220\210\345\271\266\345\217\257\344\273\245\350\257\264\346\230\257\346\210\221\344\273\254\345\234\250\346\223\215\344\275\234\346\225\260\347\273\204\344\270\255\346\234\200\345\270\270\351\201\207\345\210\260\347\232\204\345\234\272\346\231\257\344\271\213\344\270\200\357\274\201 \346\234\254\347\257\207\345\260\206\347\256\200\350\246\201\345\210\206\346\236\220\344\270\211\347\247\215\346\225\260\347\273\204\345\220\210\345\271\266\347\232\204\346\226\271\346\263\225\357\274\214\345\271\266 - \346\216\230\351\207\221 (2024_8_14 19_28_28).html" @@ -0,0 +1,494 @@ + JS【数组合并】的性能差异对比数组合并可以说是我们在操作数组中最常遇到的场景之一! 本篇将简要分析三种数组合并的方法,并 - 掘金 + + + +

+ JS【数组合并】的性能差异对比 +

+ 3,908 + + 阅读2分钟 +
+ 专栏:  +
+ JavaScript【掘金安东尼】 +

「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战

+
+

数组合并可以说是我们在操作数组中最常遇到的场景之一!

+

本篇将简要分析三种数组合并的方法,并带来它们的性能差异分析~

+

它们是:

+
    +
  • Concat
  • +
  • Push
  • +
  • Spread Syntax
  • +
+

闲言少叙,冲ヾ(◍°∇°◍)ノ゙

+

Concat

+

Concat 是 JavaScript 的标准方法:用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

+
    +
  • Array.prototype.concat()
  • +
+

image.png

+

如图示:

+

image.png

+

图片来源

+

array2 合并到了 array1 后面,得到了一个新的 result 数组;

+

Push

+

Push 也是合并数组常用方法,可将一个或多个元素添加到数组的末尾,并返回该数组的新长度。

+
    +
  • Array.prototype.push()
  • +
+

image.png

+

image.png

+

图片来源

+

与 concat 不同的时,push 方法会更改原数组,如图示,array1 发生了变化;

+

push 方法按照以上用循环的方式写,显然是不够“美妙的”,所以有了一个新的语法来支持优化它:那就是扩展运算符;

+

Spread Syntax

+

扩展运算符 (spread syntax) 是 ES6 提供的一种非常便捷的新语法,用来展开字符串,数组和对象;

+

合并方法如下:

+

image.png

+

一行就解决:

+

image.png

+

图片来源

+

性能对比

+

以上 3 中数组合并方法的性能测评基于第三方库 github.com/ecofic/arti…,可以 clone 下来,运行调试:

+

image.png

+

这里,我们尝试从 3 个维度来进行测试:(分别用1、10、100、1000、100,000、100,000、1,000,000元素数组进行100次测试)

+
    +
  1. 基本类型数组;
  2. +
  3. 对象数组;
  4. +
  5. 基本类型和对象混合的数组;
  6. +
+

得到以下数据:

+

image.png

+

image.png

+

image.png

+

绿块代表着数组合并的性能较优,红色反之较差;

+

可以很明显的看到:扩展运算法的合并方法性能较优,但是不适用于长度较大的数组,会得到 N/A 的结果;(原作者测出这个长度边界值是 63,653)

+

所以,最终给到一个结论是:

+

合并长度小的数组,用扩展运算符;合并长度较大的数组,用 concat!

+

简单又实用~~

+
+

OK,以上便是本篇分享~

+
+

我是掘金安东尼,输出暴露输入,技术洞见生活,再会~~

+
本文收录于以下专栏
cover
+ JavaScript【掘金安东尼】 +
+ 专栏目录 +
+ JavaScript 核心,我更关心“如何使用闭包”以及“如何充分利用异步”! +
·
116 篇文章
评论 0
avatar
0 / 1000
暂无评论数据
+ 20 +
评论
+ 收藏 +
avatar
  • 收藏成功!
    已添加到「」, 点击更改
    + APP内打开 +
    + +
    \ No newline at end of file