Reputation: 3543
Here is a code to create an array of arrays named sims
through a for loop and using str1
.
so far I need to define the sims
length manually, equal to length of str1
like : let sims = [[],[],[],[]];
(four arrays equal to four words on str1
)
how can I fill sims with arrays programmatically?
var str1 = "do you ever looked";
var str2 = "do you fr ever looked";
let sims = [[],[],[],[]]; // instead I want let sims = [];
let s1 = str1.split(" ")
let s2 = str2.split(" ")
for (var j = 0; j < s1.length; j++) {
for (var i = 0; i < s2.length; i++) {
sims[j].push(s1[j].toString());
}
}
console.log(sims);
Upvotes: 7
Views: 472
Reputation: 7446
Here is a single line solution using just Array.from
and split
.
s1
its length, the second argument is invoked to fill all the values. For that second argument, we care about the index (i
).s2
its length, for that one we don't care about either of the arguments, since we will just need the s1
element at index i
of the previous loop (so, s2.length times s1[i]). '' +
is just the equivalent of toString
, which is unneeded, but the main example had it, so...var str1 = "do you ever looked", s1 = str1.split(' ');
var str2 = "do you fr ever looked", s2 = str2.split(' ');
let sims = Array.from(s1, (_,i) => Array.from(s2, () => '' + s1[i]));
console.log(sims);
Upvotes: 5
Reputation: 2590
You could easily get this done by pushing empty arrays into your sims-array
inside your first loop, like in the example below:
var str1 = "do you ever looked";
var str2 = "do you fr ever looked";
let sims = [];
let s1 = str1.split(" ")
let s2 = str2.split(" ")
for (var j = 0; j < s1.length; j++) {
sims.push([]); // this does the trick :-)
for (var i = 0; i < s2.length; i++) {
sims[j].push(s1[j].toString());
}
}
console.log(sims);
Upvotes: 4
Reputation: 12796
You could just split
, map
and fill
an array to accomplish the same output, no need for any for loop at that time
var str1 = "do you ever looked";
var str2 = "do you fr ever looked";
let subArrayLength = str2.split(" ").length;
let sims = str1.split(' ').map( value => new Array( subArrayLength ).fill( value ) );
console.log(sims);
Upvotes: 5
Reputation: 662
One way :
var s1 = str1.split(" ")
let array = []
for(var i = 0; i < s1.length; s1++) array.push(new Array())
Upvotes: 1
Reputation: 20039
Do initializing
the array before pushing
sims[j] = [];
var str1 = "do you ever looked";
var str2 = "do you fr ever looked";
let sims = [];
let s1 = str1.split(" ")
let s2 = str2.split(" ")
for (var j = 0; j < s1.length; j++) {
sims[j] = [];
for (var i = 0; i < s2.length; i++) {
sims[j].push(s1[j].toString());
}
}
console.log(sims);
Upvotes: 2