【问题标题】:How to group multiple array elements from first array, and assign it to second array's first element如何将第一个数组中的多个数组元素分组,并将其分配给第二个数组的第一个元素
【发布时间】:2019-02-07 20:18:11
【问题描述】:

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

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' }
];

我想要做的是,每 3 个元素取 List 数组,然后创建另一个数组,如下所示:

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]];
        }
    }

这以某种方式跳过了第一个元素....我现在完全不知道为什么

【问题讨论】:

  • 没有真正详细说明作为答案,但您可以循环从 3 到 3 个元素(而不是 1 x 1)的数组,使用 Array.prototype.slice() 一次提取 3 个元素和 @987654325 @ 然后在一个新数组上。
  • 您能重新检查一下ArrayFinal 的语法吗?这看起来不像是有效的语法。
  • @DeborahK 有效
  • 如果我只是将 ArrayFinal 行完全按照您的方式粘贴到 Stackblitz(在组件内),我会收到错误 ';' expected。至少,它似乎应该有一个=?
  • 好的..谢谢@DeborahK

标签: angular typescript logic


【解决方案1】:

我能够转换这个:

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 从数组中创建一个 observable。

bufferCount(3) 一次缓冲三个元素。

每次从 observable 发出 3 个元素时,它们都会被推入 groupedList 数组的一个元素中。

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

【讨论】:

    【解决方案2】:

    您可以使用数组slice 和splice 操作来做到这一点。 slice 源数组然后使用array spread(...) 推送到目标数组,然后splice 源数组。循环直到源有项目。

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

    【讨论】:

      猜你喜欢
      • 2022-11-16
      • 2020-07-26
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多