It's been a long time since I had to work on some javascript code and I'm a lot rusty.
I need to split an array like this:
Object ( [0] => 2013-04-12 [1] => text [2] => text [3] => text [4] => text [5] => 2013-04-11 [6] => text [7] => text [8] => text [9] => text [10] => text [11] => text [12] => 2013-04-10 [13] => text [14] => text [15] => text [16] => text [17] => 2013-04-09 [18] => text [19] => text [20] => text )
into json objects or arrays where index 0 is always the date:
Object0 ( [0] => 2013-04-12 [1] => text [2] => text [3] => text [4] => text ) Object1 ( [0] => 2013-04-11 [1] => text [2] => text [3] => text [4] => text [5] => text [6] => text ) Object2 ( [0] => 2013-04-10 [1] => text [2] => text [3] => text [4] => text ) Object3 ( [0] => 2013-04-09 [1] => text [2] => text [3] => text )
So as you can see, I can only use the value to figure out each new array, which can be of different sizes.
Thanks for any help.
UPDATE Sorry I didn't publish my code in the initial question because what I had written was way too crap (and I was very ashamed). Here the code I used in the end thanks to the solution from Bangerang. Thanks everyone for your help and contributions.
var events = [];
var result = [];
var j = 0;
for (var i = 0; i < tableData.length; i++){
if (/^(\d{4})-(\d{2})-(\d{2})$/.test(tableData[i])){ //Returning true if it's just numbers
j = j + 1;
events[j] = [];
events[j].push(tableData[i]);
result.push(events[j]);
} else {
events[j].push(tableData[i]);
}
}
// Then I write the json message which will be eval to use with FullCalendar.
var json_events = '[';
for (var i = 1; i <= events.length; i++){
if (typeof events[i] !== 'undefined' && events[i].length > 0) {
for (var j = 0; j < events[i].length; j++){
if(/@/.test(events[i][j])){
json_events += '{"start":"' + events[i][0] + '",';
json_events += '"textColor":"black",';
var tmp = events[i][j].split("@");
json_events += '"backgroundColor":"' + tmp[0] + '",';
var text_pattern = new RegExp(/<b>([a-z_]+)<\/b>(.+)/);
var title_desc = text_pattern.exec(tmp[1]);
json_events += '"title":"' + title_desc[1] + '",';
json_events += '"description":"' + title_desc[0] + '"';
json_events += '},';
}
}
}
}
json_events += ']';
json_events = json_events.replace("},]","}]");
Example-2: This example uses the splice() method to split the array into chunks of array. This method removes the items from the original array. This method can be used repeatedly to split array of any size. | Split array into chunks.
To divide an array into two, we need at least three array variables. We shall take an array with continuous numbers and then shall store the values of it into two different variables based on even and odd values.
Definition and UsageThe split() method splits a string into an array of substrings. The split() method returns the new array. The split() method does not change the original string.
Use the array_split() method, pass in the array you want to split and the number of splits you want to do.
Assuming that the date's is the only ones with just numbers in it you can try this:
var object = [];
var result = [];
for (var i = 0; i < objects.length; i++){
if (/^\d+$/.test(objects[i])){ //Returning true if it's just numbers
object = []
object.push(objects[i]);
result.push(object);
}else {
object.push(objects[i]);
}
}
basically,
result = []
sourceArray.forEach(function(element) {
if(element looks like a date)
result.push([])
result[result.length - 1].push(element)
})
post your actual code if you want more ;)
Currently, the work is not really complicated. You just have to go through your array, and create a new one when you encounter a date formatted cell. Until then, you fill the previous created array with the non-date encountered values. I suppose that all of the array content are string, so we will determine here the date format using a simple regex ^[0-9]{8}$
var result = new Array();
var date_format = /^[0-9]{8}$/;
for (var k in big_array) {
// if date format, add a new array
if (date_format.test(result[k])) {
result.push(new Array());
}
// finally, push the value in the last array
result[result.length-1].push(big_array[k]);
}
This is a really simple algorithm exercise, so i would recommend to practice more the code's writing and avoid asking next time, or at least show what you tried.
Best regards.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With