Reputation: 13
I want to take an array output like the following:
[a,
b,
c,
d,
e,
f]
and slice it into sections, then output each new array on a newline like this:
[a,b
c,d
e,f]
Here's what i have so far:
var data = "";
for (i = 0; i < 4; i+=2) {
data += output.slice(i,2);
}
return data;
I've been working at this for some time now trying different things to make this work but no luck. I'm new to JS, so i need some help.
Upvotes: 0
Views: 3279
Reputation: 83
While zos0K's answer should suffice for slicing, one point I would like to mention is that if you just want to output the string and do nothing else with the resulting sliced arrays, I would recommend that you directly add them to a string and then print it out as aposed to creating a new array for every couple strings. While it does the job, Array.prototype.slice returns a new array each time, and creating new arrays can get expensive fairly quickly.
Upvotes: 1
Reputation: 33726
Assuming they are only chars (1 char) and there are not empty chars, you can join
, match the chars as pairs using the regex /(.+?){2}/g
, map
to char,char
and finally join
with \n
.
let output = ['a', 'b', 'c', 'd', 'e', 'f'],
data = output.
join('').
match(/(.+?){2}/g).
map(s => s.split('').join(',')).join('\n');
console.log(data);
Upvotes: 1
Reputation: 27214
let data = ['a', 'b', 'c', 'd', 'e', 'f']
var output = "";
for (i = 0; i < data.length; i+=2) {
output += data.slice(i, i+2).join(",") + "\n";
}
console.log(`[${output.substring(0, output.lastIndexOf("\n"))}]`);
Upvotes: 1
Reputation: 92440
Since you have six elements in your array, you need to iterate to 6 not 4. The best way to do that is to use the length of your array, so if the length changes you don't need to change the loop. When taking a slice you also want slice(i, i+2)
If you just want to make a string, you can add a \n
character in each iteration:
let output = ['a', 'b', 'c', 'd', 'e', 'f']
var data = "";
for (i = 0; i < output.length; i+=2) {
data += output.slice(i,i+2).join(" ") + "\n";
}
console.log(data);
Upvotes: 3