使用javascript中的对象数组进行排序或插入会更有效吗?

罗兰多

我有多个对象,字段名为“ num”。Num可以是1000000000到10000000005之间的任何数字。我想确保如果我有x个列表,则所有列表都需要基于“ num”属性以升序排列在array1中。

如果我从这样的数组开始,

array1": [{item:23532532, num:1000000520},{item:23523, num:1000000620},{item:346346432, num:1000000620}]

我有第二个数组

"array2": [{item:23532, num:....},{item:3623, num:....}]

假设array2按“ num”排序,这样做是否更有效:

1)添加然后排序整个-遍历“ array2”中的每个项目并将其添加到“ array1”的末尾,然后在整个数组的“ num”属性上执行“ sort”函数中内置的javascript吗?

2)插入到正确的位置-循环遍历“ array2”中的每个项目,并使用“ if”条件检查“ num”值是否大于“ array2”中的当前项目,如果是,则在前面插入元素该索引通过“拼接”。(未使用javascript内置数组排序)

还是有更有效的方法?伪代码或示例代码是一个加号。

jfriend00

我在三种不同的浏览器中测量了三种不同算法的结果。

关于所有与性能相关的问题,有两件事是正确的:

  1. 如果您真的想知道答案,则必须在多个浏览器中测试特定的算法才能真正回答问题。

  2. 实际上,许多与性能相关的问题在使用它们的给定上下文中并不重要,因此担心它们,直到您知道需要担心它们,这不过是浪费在过早优化甚至不必要的优化上的时间。因此,在进行特定领域的性能研究之前,您应该知道这很重要,并且值得花时间在上面。

也就是说,这里是对三种算法的一些测量。假定您从两个对象数组开始,每个对象数组由每个对象中存在的一个特定数字属性独立排序。

这是jsperf:http : //jsperf.com/concat-sort-vs-insert-sort/5 ,其中包含三种算法的代码。

算法1是串联的,然后对串联的数组进行排序。在JS中,无非是:

var result = arr1.concat(arr2);
result.sort(sortByNum);

算法2是对插入排序的尝试。基本思想是遍历第二个数组,并为该数组中的每个项目找到将其插入第一个数组的位置。由于两个数组都已排序,因此我们只需要开始寻找一个位置,即可在插入最后一个项目之后的位置将下一个项目插入第一个数组。

算法3是合并排序。这里的想法是创建一个空的结果数组和两个索引,两个源数组中的每个索引一个。对于每个源索引处的值,将结果推入两个项目中的较低者,然后增加其源索引。当任一源索引用尽时,您将推入另一个数组的其余部分。我猜想它会比插入排序更有效,因为它不必将项目插入数组的中间,而只需添加到末尾,这可能会更快。


为了运行测试,我创建了两个数组,每个数组包含100个对象。每个对象都有一个数字属性,该属性被分配一个0到100,000之间的随机数。然后,对两个源阵列中的每一个进行预排序。然后,在这两个源数组上测试每种算法。

并且,结果如下:

在此处输入图片说明

这是合并排序算法的代码:

function mergeSort(arr1, arr2) {
    var result = [];
    var index1 = 0;
    var index2 = 0;
    if (!arr1.length) {
        return arr2.slice(0);
    } else if (!arr2.length) {
        return arr1.slice(0);
    }
    while (true) {
        if (arr1[index1].num <= arr2[index2].num) {
            result.push(arr1[index1]);
            ++index1;
            // see if we reached the end of the array
            if (index1 >= arr1.length) {
                result.push.apply(result, arr2.slice(index2));
                break;
            }
        } else {
            result.push(arr2[index2]);
            ++index2;
            // see if we reached the end of the array
            if (index2 >= arr2.length) {
                result.push.apply(result, arr1.slice(index1));
                break;
            }
        }
    }
    return result;
}

工作演示:http : //jsfiddle.net/jfriend00/mja1c13d/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分块数组更有效吗?

来自分类Dev

JavaScript中的IndexOf方法比遍历数组更有效吗?

来自分类Dev

在 Javascript 中查找重复对象或数组的更有效解决方案?

来自分类Dev

数组可以比排序更有效地分组吗?

来自分类Dev

在用Javascript更新对象数组中的某些元素时,考虑数组大小,哪种方法更有效?

来自分类Dev

在JavaScript中合并多个排序对象数组的最有效方法是什么?

来自分类Dev

数组公式或单个公式更有效吗?

来自分类Dev

在数组中搜索多个对象的更有效方法

来自分类Dev

将项目分组为一个对象,然后将其转换为数组以使用Javascript进行排序是否有效/明智?

来自分类Dev

使用向量对比使用向量对更有效吗?

来自分类Dev

在MATLAB中更有效的对称方阵的方式吗?

来自分类Dev

我可以使用更有效的查询吗

来自分类Dev

使用setState或setProps对于Reactjs更有效吗?

来自分类Dev

在OpenGL中渲染对象的哪种方式更有效?

来自分类Dev

更有效的排序算法?

来自分类Dev

使用Angular over Swig可以更有效地解释路线中的数据吗?

来自分类Dev

有更有效的方法吗?

来自分类Dev

为什么在Fortran中按元素进行矩阵行交换比按数组进行行交换更有效?

来自分类Dev

是否有比我进行标题排序(没有前导引号或文章)更有效的标题数组排序方式?

来自分类Dev

更有效的.RData吗?

来自分类Dev

更有效的书写方式吗?

来自分类Dev

更有效的布局可能吗?

来自分类Dev

使用工会而不是在Apache Spark中加入会更有效,还是没关系?

来自分类Dev

使用JavaScript更改样式的更有效方法?

来自分类Dev

更有效的数组搜索

来自分类Dev

什么是排序算法?还有更有效的方法吗?

来自分类Dev

在哪里更有效或更方便地对数据进行排序?

来自分类Dev

一种更有效的方法来对netstat命令的结果进行排序

来自分类Dev

使用 spark 版本 2 在 HIVE 中哪个更有效,最大或按 desc 限制 1 排序

Related 相关文章

  1. 1

    分块数组更有效吗?

  2. 2

    JavaScript中的IndexOf方法比遍历数组更有效吗?

  3. 3

    在 Javascript 中查找重复对象或数组的更有效解决方案?

  4. 4

    数组可以比排序更有效地分组吗?

  5. 5

    在用Javascript更新对象数组中的某些元素时,考虑数组大小,哪种方法更有效?

  6. 6

    在JavaScript中合并多个排序对象数组的最有效方法是什么?

  7. 7

    数组公式或单个公式更有效吗?

  8. 8

    在数组中搜索多个对象的更有效方法

  9. 9

    将项目分组为一个对象,然后将其转换为数组以使用Javascript进行排序是否有效/明智?

  10. 10

    使用向量对比使用向量对更有效吗?

  11. 11

    在MATLAB中更有效的对称方阵的方式吗?

  12. 12

    我可以使用更有效的查询吗

  13. 13

    使用setState或setProps对于Reactjs更有效吗?

  14. 14

    在OpenGL中渲染对象的哪种方式更有效?

  15. 15

    更有效的排序算法?

  16. 16

    使用Angular over Swig可以更有效地解释路线中的数据吗?

  17. 17

    有更有效的方法吗?

  18. 18

    为什么在Fortran中按元素进行矩阵行交换比按数组进行行交换更有效?

  19. 19

    是否有比我进行标题排序(没有前导引号或文章)更有效的标题数组排序方式?

  20. 20

    更有效的.RData吗?

  21. 21

    更有效的书写方式吗?

  22. 22

    更有效的布局可能吗?

  23. 23

    使用工会而不是在Apache Spark中加入会更有效,还是没关系?

  24. 24

    使用JavaScript更改样式的更有效方法?

  25. 25

    更有效的数组搜索

  26. 26

    什么是排序算法?还有更有效的方法吗?

  27. 27

    在哪里更有效或更方便地对数据进行排序?

  28. 28

    一种更有效的方法来对netstat命令的结果进行排序

  29. 29

    使用 spark 版本 2 在 HIVE 中哪个更有效,最大或按 desc 限制 1 排序

热门标签

归档