1
votes

Grouper des objets dans le tableau imbriqué

J'ai 2 tableaux dans un autre tableau. À l'intérieur de ces tableaux, il y a des objets et je veux les regrouper par la clé d'objet.

le tableau parent contient n tableau

0:
309: [TaskType,TaskType]
310: [TaskType,TaskType]
311: [TaskType,TaskType]
312: [TaskType,TaskType]
313: [TaskType,TaskType]
314: [TaskType,TaskType]
485: [TaskType,TaskType]

Comme je l'ai dit , à l'intérieur de ces tableaux, il y a aussi un tableau rempli d'objets

tableau 1

taskTypeList: Array(7)
0: TaskType {Key: 313, Value: "R/I", IsDisabled: true, Duration: 1}
1: TaskType {Key: 312, Value: "MEL", IsDisabled: true, Duration: 2}
2: TaskType {Key: 311, Value: "SGH", IsDisabled: true, Duration: 3}
3: TaskType {Key: 309, Value: "LOC", IsDisabled: false, Duration: 6}
4: TaskType {Key: 485, Value: "TT", IsDisabled: true, Duration: 5}
5: TaskType {Key: 310, Value: "FOT", IsDisabled: true, Duration: 6}
6: TaskType {Key: 314, Value: "TS", IsDisabled: true, Duration: 7}

tableau 2 em>

taskTypeList: Array(7)
0: TaskType {Key: 313, Value: "R/I", IsDisabled: true, Duration: 1}
1: TaskType {Key: 312, Value: "MEL", IsDisabled: true, Duration: 2}
2: TaskType {Key: 311, Value: "SGH", IsDisabled: false, Duration: 9}
3: TaskType {Key: 309, Value: "LOC", IsDisabled: true, Duration: 4}
4: TaskType {Key: 485, Value: "TT", IsDisabled: true, Duration: 5}
5: TaskType {Key: 310, Value: "FOT", IsDisabled: true, Duration: 6}
6: TaskType {Key: 314, Value: "TS", IsDisabled: true, Duration: 7}

Je souhaite regrouper ces tableaux par leurs clés. Le résultat devrait ressembler à ceci:

[array_1, array_2]

Comment faire cela?


0 commentaires

3 Réponses :


1
votes

Une façon de le faire est de fusionner les tableaux ensemble en premier et la clé par chaque valeur de clé:

var parentArray = [
  [{
      Key: 313,
      Value: "R/I",
      IsDisabled: true,
      Duration: 1
    },
    {
      Key: 312,
      Value: "MEL",
      IsDisabled: true,
      Duration: 2
    },
    {
      Key: 311,
      Value: "SGH",
      IsDisabled: false,
      Duration: 9
    },
    {
      Key: 309,
      Value: "LOC",
      IsDisabled: true,
      Duration: 4
    },
    {
      Key: 485,
      Value: "TT",
      IsDisabled: true,
      Duration: 5
    },
    {
      Key: 310,
      Value: "FOT",
      IsDisabled: true,
      Duration: 6
    },
    {
      Key: 314,
      Value: "TS",
      IsDisabled: true,
      Duration: 7
    }
  ],

  [{
      Key: 313,
      Value: "R/I",
      IsDisabled: true,
      Duration: 1
    },
    {
      Key: 312,
      Value: "MEL",
      IsDisabled: true,
      Duration: 2
    },
    {
      Key: 311,
      Value: "SGH",
      IsDisabled: true,
      Duration: 3
    },
    {
      Key: 309,
      Value: "LOC",
      IsDisabled: false,
      Duration: 6
    },
    {
      Key: 485,
      Value: "TT",
      IsDisabled: true,
      Duration: 5
    },
    {
      Key: 310,
      Value: "FOT",
      IsDisabled: true,
      Duration: 6
    },
    {
      Key: 314,
      Value: "TS",
      IsDisabled: true,
      Duration: 7
    }
  ]
];

var allTasks = [].concat.apply([], parentArray);
var grouped = {};
for (var i = 0, len = allTasks.length; i < len; i++) {
  var item = allTasks[i];  
  grouped[item["Key"]] = grouped[item["Key"]] || [];
  grouped[item["Key"]].push(item);
};

console.log(grouped);


0 commentaires

2
votes

Vous pouvez utiliser l'opérateur spread pour concater des tableaux, puis utiliser la méthode reduction pour regrouper par clés

let array1 = [
	{Key: 313, Value: "R/I", IsDisabled: true, Duration: 1},
	{Key: 312, Value: "MEL", IsDisabled: true, Duration: 2},
	{Key: 311, Value: "SGH", IsDisabled: false, Duration: 9},
	{Key: 309, Value: "LOC", IsDisabled: true, Duration: 4},
	{Key: 485, Value: "TT", IsDisabled: true, Duration: 5},
	{Key: 310, Value: "FOT", IsDisabled: true, Duration: 6},
	{Key: 314, Value: "TS", IsDisabled: true, Duration: 7}
]

let array2 = [
	{Key: 313, Value: "R/I", IsDisabled: true, Duration: 1},
	{Key: 312, Value: "MEL", IsDisabled: true, Duration: 2},
	{Key: 311, Value: "SGH", IsDisabled: true, Duration: 3},
	{Key: 309, Value: "LOC", IsDisabled: false, Duration: 6},
	{Key: 485, Value: "TT", IsDisabled: true, Duration: 5},
	{Key: 310, Value: "FOT", IsDisabled: true, Duration: 6},
	{Key: 314, Value: "TS", IsDisabled: true, Duration: 7}
];

let container = [...array1, ...array2];
let result = container.reduce((acc, c) => ((acc[c.Key] = (acc[c.Key] || [])).push(c), acc),{});
console.log(result);


0 commentaires

1
votes

Essayez la procédure suivante.

  1. Concaténer les deux tableaux
  2. Créez un nouveau tableau en analysant le tableau concaténé.

<!DOCTYPE html>
<html lang="en">
  <head>
    <script>
      var arr1 = [
        {TaskType : {Key: 313, Value: "R/I", IsDisabled: true, Duration: 1}},
        {TaskType : {Key: 312, Value: "MEL", IsDisabled: true, Duration: 2}},
        {TaskType : {Key: 311, Value: "SGH", IsDisabled: false, Duration: 9}},
        {TaskType : {Key: 309, Value: "LOC", IsDisabled: true, Duration: 4}},
        {TaskType : {Key: 485, Value: "TT", IsDisabled: true, Duration: 5}},
        {TaskType : {Key: 310, Value: "FOT", IsDisabled: true, Duration: 6}},
        {TaskType : {Key: 314, Value: "TS", IsDisabled: true, Duration: 7}}
      ];
      var arr2 = [
        {TaskType : {Key: 313, Value: "R/I", IsDisabled: true, Duration: 1}},
        {TaskType : {Key: 312, Value: "MEL", IsDisabled: true, Duration: 2}},
        {TaskType : {Key: 311, Value: "SGH", IsDisabled: true, Duration: 3}},
        {TaskType : {Key: 309, Value: "LOC", IsDisabled: false, Duration: 6}},
        {TaskType : {Key: 485, Value: "TT", IsDisabled: true, Duration: 5}},
        {TaskType : {Key: 310, Value: "FOT", IsDisabled: true, Duration: 6}},
        {TaskType : {Key: 314, Value: "TS", IsDisabled: true, Duration: 7}},
      ];
      var combinedArr = [];
      var joinedArray = arr1.concat(arr2);
      joinedArray.forEach(item => {
        if(combinedArr[item.TaskType.Key]){
          combinedArr[item.TaskType.Key].push(item)
        }
        else {
          combinedArr[item.TaskType.Key] = [];
          combinedArr[item.TaskType.Key].push(item)
        }
      });
      console.log(combinedArr);
      </script>
  </head>
</html>


0 commentaires