I have incoming bytes of arrays once a time. It kind of looks like this
[10,12,34,58,62]
[83,33,23,44,13]
[10,12,34,58,62]
[34, 77,54,23,87]
[83,33,23,44,13]
[10,12,34,58,62]
[83,33,23,44,66]
[13] …continues.
So, it renders each array every time. I needed them to be rendered like
[10,12,34,58,62,83,33,23,44,13]
[10,12,34,58,62,34,77,54,23,87,83,33,23,44,13]
[10,12,34,58,62,83,33,23,44,66,13].
The first element will be 10 and the last 13. Can anyone help me with the code? Thanks in advance.
If your incoming bytes is 2d array then try this.
let arr = [
[10, 12, 34, 58, 62],
[83, 33, 23, 44, 13],
[10, 12, 34, 58, 62],
[34, 77, 54, 23, 87],
[83, 33, 23, 44, 13],
[10, 12, 34, 58, 62],
[83, 33, 23, 44, 66],
[13]
]
let openedArr = []
for (let value of arr) {
openedArr = [...openedArr, ...value]
}
let resultArr = []
let child = []
for (let value of openedArr) {
child.push(value)
if (value == 13) {
resultArr.push(child)
child = []
}
}
console.log(resultArr)
Explaination
// @param {accumulator} is array of array of numbers
// @param {chunk} is the array of numbers
// @return {accumulator}
const process_bytes = (accumulator, chunk) => {
if (accumulator && accumulator.length) {
if (chunk && chunk.length) {
if (chunk[0] === 10) {
return [...accumulator, chunk];
} else {
return [...accumulator.slice(0, accumulator.length - 1), [...accumulator[accumulator.length - 1], ...chunk]];
}
}
}
return chunk && chunk.length && [chunk] || [];
};
Assumption
The following code follows the provided input data and the expected output in the OP
const process_bytes = (accumulator, chunk) => {
if (accumulator && accumulator.length) {
if (chunk && chunk.length) {
if (chunk[0] === 10) {
return [...accumulator, chunk];
} else {
return [...accumulator.slice(0, accumulator.length - 1), [...accumulator[accumulator.length - 1], ...chunk]];
}
}
}
return chunk && chunk.length && [chunk] || [];
};
const testData = [
[10, 12, 34, 58, 62],
[83, 33, 23, 44, 13],
[10, 12, 34, 58, 62],
[34, 77, 54, 23, 87],
[83, 33, 23, 44, 13],
[10, 12, 34, 58, 62],
[83, 33, 23, 44, 66]
];
let processed_bytes = [];
testData.forEach(x => {
processed_bytes = process_bytes(processed_bytes, x);
});
console.log(processed_bytes);
WYSIWYG => WHAT YOU SHOW IS WHAT YOU GET