【问题标题】:Create new array of objects by grouping array of objects based on property value of each object in javascript通过基于javascript中每个对象的属性值对对象数组进行分组来创建新的对象数组
【发布时间】:2015-08-02 13:58:12
【问题描述】:

我有一个对象数组,如下所示,我想通过基于 java 脚本中每个对象的属性值对 java 脚本对象数组进行分组来创建新的对象数组

这里我想根据组 ID 对对象进行分组,并将其存储到具有唯一组 ID 的对象数组中。

这是我的对象:

var Object = [
 {"Name":15,"GroupID":1,"ComplexObject":1}`object1`    
 {"Name":16,"GroupID":1,"ComplexObject":1}`object2`   
 {"Name":17,"GroupID":2,"ComplexObject":2}`object3
 {"Name":18,"GroupID":2,"ComplexObject":2}`object4`
 {"Name":15,"GroupID":3,"ComplexObject":3}`object5`
 {"Name":16,"GroupID":3,"ComplexObject":3}`object6`
 {"Name":17,"GroupID":4,"ComplexObject":4}`object7`
 {"Name":18,"GroupID":4,"ComplexObject":4}`object8` ];

【问题讨论】:

  • var Object = ... 不确定 javascript 是否希望 Object 被覆盖!

标签: javascript arrays object


【解决方案1】:

您可以通过检查组 id 并将其推送到数组对象来尝试这种方式。

  var data = [ 
                {"Name":15,"GroupID":1,"ComplexObject":1},
                {"Name":16,"GroupID":1,"ComplexObject":1},
                {"Name":17,"GroupID":2,"ComplexObject":2},
                {"Name":18,"GroupID":2,"ComplexObject":2},
                {"Name":15,"GroupID":3,"ComplexObject":3},
                {"Name":16,"GroupID":3,"ComplexObject":3},
                {"Name":17,"GroupID":4,"ComplexObject":4},
                {"Name":18,"GroupID":4,"ComplexObject":4}
             ];

  console.log("Original Data : ", data);

  var previousGroupId;
  var newObject = new Object();
  for(index in data){
      var groupId = data[index].GroupID;
      if(groupId != previousGroupId){
          var newGroup = "GroupId" + groupId;
          newObject[newGroup] = new Array();
          for(index in data){
              if(data[index].GroupID == groupId){
                  var customObject = {
                      "GroupID" : groupId,
                      "Name" : data[index].Name,
                      "ComplexObject" : data[index].ComplexObject
                  };
                  newObject[newGroup].push(customObject);        
              }
          }
      }
      previousGroupId = groupId;
  }

  console.log("Grouped data : ", newObject);

jsFiddle

【讨论】:

  • 嗨,阿沙德,感谢您的及时回复。我希望它存储在对象数组中,而不是对象中。我想得到数组的长度,必须根据长度做一些操作。
【解决方案2】:
var new_arr = [];

Objects.forEach(function(object) {
  if (new_arr.length <= object.GroupID) {
    new_arr[object.GroupID] = [];
  }
  new_arr[object.GroupID].push(object);
});

更新:如果你想要数组的长度,只需使用:

var new_arr = [];

Objects.forEach(function(object) {
  if (new_arr.length < object.GroupID) {
    new_arr[object.GroupID - 1] = [];
  }
  new_arr[object.GroupID - 1].push(object);
});

你会得到这个:

【讨论】:

  • 感谢 iplus。我得到的长度为 5,因为 ID 从 1 开始,所以第 0 个元素未定义。任何其他存储方式...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
相关资源
最近更新 更多