如何将第一个数组中的多个数组元素分组,并将其分配给第二个数组的第一个元素

时间:2019-02-07 20:18:11

标签: angular typescript logic

我有一个数组,看起来像:

public static readonly List: Array<any> = [
    { name: 'CCS', link: 'Dummy link1' },
    { name: 'CCR', link: 'Dummy link2' },
    { name: 'PM', link: 'Dummy link3' },
    { name: 'CM', link: 'Dummy link4' },
    { name: 'JM', link: 'Dummy link5' },
    { name: 'PSM', link: 'Dummy link6' }
];

我想做的是,从List数组中取出每3个元素,并按如下方式创建另一个数组:

ArrayFinal[{
             { name: 'CCS', link: 'Dummy link1' },
             { name: 'CCR', link: 'Dummy link2' },
             { name: 'PM', link: 'Dummy link3' }
           },
           {
             { name: 'CM', link: 'Dummy link4' },
             { name: 'JM', link: 'Dummy link5' },
             { name: 'PSM', link: 'Dummy link6' }
           }]

我正在尝试执行以下操作,例如找到3 === 0的模数,然后转到下一个,但不确定如何操作。

任何帮助都会很有帮助。

更新 我尝试过的:

public func(): any {
    for (let i = 1; i <= Array.List.length; i++) {
        if (i % 3 === 0) {
            this.ArrayFinal[i] = [Array.List[i], Array.List[i - 1], 
            Array.List[i - 2]];
        }
    }

这以某种方式跳过了第一个元素。...我现在完全迷失了为什么

2 个答案:

答案 0 :(得分:1)

我能够将其转换为

Criteria1:=... 

对此:

List: Array<any> = [
    { name: 'CCS', link: 'Dummy link1' },
    { name: 'CCR', link: 'Dummy link2' },
    { name: 'PM', link: 'Dummy link3' },
    { name: 'CM', link: 'Dummy link4' },
    { name: 'JM', link: 'Dummy link5' },
    { name: 'PSM', link: 'Dummy link6' }
  ];

使用以下代码:

[ 
  [ 
    { "name": "CCS", "link": "Dummy link1" },
    { "name": "CCR", "link": "Dummy link2" }, 
    { "name": "PM", "link": "Dummy link3" }
  ], 
  [ 
    { "name": "CM", "link": "Dummy link4" }, 
    { "name": "JM", "link": "Dummy link5" }, 
    { "name": "PSM", "link": "Dummy link6" }
  ]
]

from(this.List).pipe( bufferCount(3) ).subscribe(x => this.groupedList.push(x)); 从数组中创建一个可观察对象。

from一次缓冲三个元素。

每次从可观察对象发射3个元素,它们就会被推入bufferCount(3)数组的元素中。

这是堆叠闪电战:https://stackblitz.com/edit/angular-buffer-count-deborahk

答案 1 :(得分:0)

您可以使用数组slicesplice进行操作。 slice源数组,然后先按array spread(...)然后按splice源数组推入目标数组。循环直到源中有项目。

    while (Math.ceil(source.length / 3) >= 1) {
        target.push({...source.slice(0,3)});
        source.splice(0,3);
    }