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

困程序员

刚在我正在编写的一些代码中偶然发现了这种情况,并对“正确”的方法感到好奇。举例来说,我有很多对象,需要按某个属性对其进行分组,但是分组的顺序很重要。

前任。对象:

var obj = {
    "groupName" : ["Group1", "Group2" ]
}

因此,如果我在一个数组中有一堆这些对象,那么遍历每个对象,遍历其groupName属性,检查另一个数组(例如“ groups”)以查看该组是否存在(如果不创建该组)并添加对象就很烦人了。 。

是否有一个名为组的对象具有与组名称匹配的属性,是否有意义,将对象以这种方式分组,然后最后将组转换为数组(自然使用组中的某种优先级字段进行排序)是否有意义?

前任。

var groups = {
        "Group1": {
            "precedence":1,
            "objArray": []
         }
 }

然后,您可以像这样进行分组,对objs数组执行一次forEach,对obj.groupnames执行forEach,如果组中的组名将obj推入,否则groups.groupname是一个新组,请从查找表中获得优先级,然后将obj推入该组。

最后,枚举groups的所有props并添加到groupsArray中,然后按优先级排序。

这比仅使用数组更有效率吗?不太有意义?有一个更好的方法吗?我使用上面的方法进行工作,从更多的理论意义上来说,我只是在好奇这是否是常见的做法,而不是效率低下和笨拙的:P。

谢谢!

编辑:

可以更好地解释事物的开始/结束结果:

   var obj1 = {
        "groupsIBelongTo" : ["A", "B"];
    };

  var obj2 = {
    "groupsIBelongTo" : ["B", "C"];
  };

  var obj3 = {
    "groupsIBelongTo" : ["A", "C"];
  };


var objArray = [ obj1, obj2, obj3];

我想创建一个包含适当的obj的组的数组。假设优先级为B,A,C,则最终结果应为:

var groups = [ {
    "groupName" : "B",
    "objs" : [obj1, obj2]
    }, 

    {
      "groupName" : "A",
      "objs" : [obj1, obj3]
    }, 

    {
      "groupName" : "C",
      "objs" : [obj2, obj3]
    }, 
  ]
皮特

我建议阅读Mozilla开发人员网络上阵列页面它们提供了丰富的知识和示例。这是一个相当复杂的问题,因此为了清晰起见,它分为多个步骤。这是演示

使用地图,缩小,过滤

步骤1:建立对象索引

var objArray = [obj1, obj2, obj3];

var hash = sortOrder.reduce(function(hash, key) {
    hash[key] = objArray.filter(function(item) {
        return (item['groupsIBelongTo'].indexOf(key) > -1);
    });
    return hash;
}, {});

第2步:对对象进行排序和装饰

然后,使用“排序顺序”列表,可以创建对象。

var sortOrder = ['B', 'A', 'C'];
var result = sortOrder.map(function(group) {
    return {
       'groupName': group,
       'objs': hash[group]
    };
});

编辑:更改为使用过滤器以减少所需的代码量。

效率说明

如果要提高效率,则必须更加具体,因为引擎之间的JavaScript性能有所不同。使用for循环或while循环会更快比使用mapreducesort但是,这仅是15%的让步-至少根据我的浏览器而言。就像另一篇文章所暗示的那样,始终最好是通过编码来使代码变得更加聪明

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将 Javascript 对象数组转换为一个对象

来自分类Dev

根据另一个数组的顺序对数组进行有效排序

来自分类Dev

创建一个列表,然后将其转换为数组

来自分类Dev

是否有一个JavaScript库可将字符串转换为有效的CSS类名称?

来自分类Dev

在对对象数组进行排序时,是否可以使用 sort() 对已推送到底部的项目进行进一步分组?

来自分类Dev

在对对象数组进行排序时,是否可以使用 sort() 进一步对已推到顶部的项目进行分组?

来自分类Dev

用另一个最有效地对数组进行排序

来自分类Dev

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

来自分类Dev

我在javascript中有一个数组,我想将其转换为对象,这是我的以下代码

来自分类Dev

根据一个属性和日期对象的值对数组进行排序,以使用javascript获取最新条目

来自分类Dev

如何有效地将布尔表转换为一个热向量?

来自分类Dev

将枚举JavaScript转换为数组,然后在数组中选择一个随机元素

来自分类Dev

将每个具有一个对象的 JSON 对象数组转换为 JSON 对象数组

来自分类Dev

Javascript-分组后将一个数组转换为两个

来自分类Dev

是否可以使用 Jackson 将 JSON 字段分组为一个属性?

来自分类Dev

将多维C ++数组作为一个连续块访问(在堆上)是否有效

来自分类Dev

如何将JS对象转换为有效的JSON文件并使用AJAX将其检索回来?

来自分类Dev

ES2015+ 将对象数组有效地转换为以对象数组为值的分组哈希图的方法

来自分类Dev

将没有对象的数组与对象转换为一个关联数组

来自分类Dev

javascript:使用第一个“行”将二维数组转换为对象数组以定义属性

来自分类Dev

创建一个 php 数组,然后使用 MySQL 数据转换为一个 javascript 数组

来自分类Dev

将一个对象数组转换为另一个具有不同结构的对象数组

来自分类Dev

是否可以使用BASH / bc / printf将浮点数舍入到第一个有效数字?

来自分类Dev

是否可以使用BASH / bc / printf将浮点数舍入到第一个有效数字?

来自分类Dev

如何有效地将一个KDB函数的输出转换为三个表列?

来自分类Dev

有效地将2D数组转换为对象,从而消除JavaScript中的重复项

来自分类Dev

分割字节数组然后在Python中将其转换为字符串的有效方法

来自分类Dev

分割字节数组然后在Python中将其转换为字符串的有效方法

来自分类Dev

使用相同的键,将值转换为数组,将多个对象转换为一个对象

Related 相关文章

  1. 1

    将 Javascript 对象数组转换为一个对象

  2. 2

    根据另一个数组的顺序对数组进行有效排序

  3. 3

    创建一个列表,然后将其转换为数组

  4. 4

    是否有一个JavaScript库可将字符串转换为有效的CSS类名称?

  5. 5

    在对对象数组进行排序时,是否可以使用 sort() 对已推送到底部的项目进行进一步分组?

  6. 6

    在对对象数组进行排序时,是否可以使用 sort() 进一步对已推到顶部的项目进行分组?

  7. 7

    用另一个最有效地对数组进行排序

  8. 8

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

  9. 9

    我在javascript中有一个数组,我想将其转换为对象,这是我的以下代码

  10. 10

    根据一个属性和日期对象的值对数组进行排序,以使用javascript获取最新条目

  11. 11

    如何有效地将布尔表转换为一个热向量?

  12. 12

    将枚举JavaScript转换为数组,然后在数组中选择一个随机元素

  13. 13

    将每个具有一个对象的 JSON 对象数组转换为 JSON 对象数组

  14. 14

    Javascript-分组后将一个数组转换为两个

  15. 15

    是否可以使用 Jackson 将 JSON 字段分组为一个属性?

  16. 16

    将多维C ++数组作为一个连续块访问(在堆上)是否有效

  17. 17

    如何将JS对象转换为有效的JSON文件并使用AJAX将其检索回来?

  18. 18

    ES2015+ 将对象数组有效地转换为以对象数组为值的分组哈希图的方法

  19. 19

    将没有对象的数组与对象转换为一个关联数组

  20. 20

    javascript:使用第一个“行”将二维数组转换为对象数组以定义属性

  21. 21

    创建一个 php 数组,然后使用 MySQL 数据转换为一个 javascript 数组

  22. 22

    将一个对象数组转换为另一个具有不同结构的对象数组

  23. 23

    是否可以使用BASH / bc / printf将浮点数舍入到第一个有效数字?

  24. 24

    是否可以使用BASH / bc / printf将浮点数舍入到第一个有效数字?

  25. 25

    如何有效地将一个KDB函数的输出转换为三个表列?

  26. 26

    有效地将2D数组转换为对象,从而消除JavaScript中的重复项

  27. 27

    分割字节数组然后在Python中将其转换为字符串的有效方法

  28. 28

    分割字节数组然后在Python中将其转换为字符串的有效方法

  29. 29

    使用相同的键,将值转换为数组,将多个对象转换为一个对象

热门标签

归档