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);
}
我正在尝试使用以下函数将 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);
}