我有一个数组,看起来像:
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]];
}
}
这以某种方式跳过了第一个元素。...我现在完全迷失了为什么
答案 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)
您可以使用数组slice
和splice
进行操作。 slice
源数组,然后先按array spread(...)
然后按splice
源数组推入目标数组。循环直到源中有项目。
while (Math.ceil(source.length / 3) >= 1) {
target.push({...source.slice(0,3)});
source.splice(0,3);
}