javascript 数组分成块

javascript array divide in chunks

我正在尝试使用以下函数将 javascript 数组分成至少 5 个块。 x 和 z 应该只有 5 或少于 5。我也在尝试使用日期条件。 我已经对内部 x 和 z 使用以下函数进行了尝试,但它没有用,因此寻求一些有关正确功能的帮助。

示例输入

"data": [
            {
                "date": "01-18-2022",
                "x": [
                    60,
                    59,
                    58,
                    57,
                    56,
                    55,
                    54,
                    53,
                    52,
                    51,
                    50,
                    49,
                    48,
                    47,
                    46
                ],
                "z": [
                    61,
                    60,
                    59,
                    58,
                    57,
                    56,
                    55,
                    54,
                    53,
                    52,
                    51,
                    50,
                    49,
                    48,
                    47
                ]
            }
        ],

预期输出

"data": [
  {
    "date": "01-18-2022",
      “x: [
      60,
      59,
      58,
      57,
      56,
    ],
      “Z”: [
      61,
      60,
      59,
      58,
      ]
  },
  {
    "date": "01-18-2022",
      “x: [
      55,
      54,
      53,
      52,
      51,
    ],
      “Z”: [
      55,
      54,
      53,
      52,
      51,
      ]
  }, {
    "date": "01-18-2022",
      “x: [
      50,
      49,
      48,
      47
    ],
      “Z”: [
      50,
      49,
      48,
      47
    ]
}
]

我对内部数组使用了这个函数,但它不起作用。

function* generateChunks(array, size) {
  let start = 0;
  while (start < array.length) {
    yield array.slice(start, start + size);
    start += size;
  }
}

试试这个:

let data = [
    {
        "date": "01-18-2022",
        "x": [
            60,
            59,
            58,
            57,
            56,
            55,
            54,
            53,
            52,
            51,
            50,
            49,
            48,
            47,
            46
        ],
        "z": [
            61,
            60,
            59,
            58,
            57,
            56,
            55,
            54,
            53,
            52,
            51,
            50,
            49,
            48,
            47
        ]
    }
];

function arrayChunk(dataItem, chunkSize){
    let res = []
    for (let i = 0; i < dataItem.x.length; i += chunkSize){
            res.push({
                date: dataItem.date,
                x: dataItem.x.slice(i, i + chunkSize),
                z: dataItem.z.slice(i, i + chunkSize),
            })
    }
    return res
}

data = data.map(dataItem => arrayChunk(dataItem, 5)).flat();

console.log(data);

也许这有帮助:

dataJSON = {
    "date": "01-18-2022",
    "x": [
        60,
        59,
        58,
        57,
        56,
        55,
        54,
        53,
        52,
        51,
        50,
        49,
        48,
        47,
        46
    ],
    "z": [
        61,
        60,
        59,
        58,
        57,
        56,
        55,
        54,
        53,
        52,
        51,
        50,
        49,
        48,
        47
    ]
}



function* chunkData(dataJSON, chunkSize){
    let keys = Object.keys(dataJSON);
    keys = keys.filter(x => x !== "date");
    
    let maxSize = Math.max(keys.reduce(key => dataJSON[key].length));

    start = 0;
    while(start < maxSize){
        let chunk = {
            "date": dataJSON["date"]
        };

        for(let key of keys){
            chunk[key] = dataJSON[key].slice(
                start,
                Math.min(
                    start + chunkSize,
                    dataJSON[key].length
                )
            );
        }

        start += chunkSize;

        yield chunk;
    }
}


for(let x of chunkData(dataJSON, 5)){
    console.log(x);
}