Jason Chen Jason Chen - 3 months ago 8
Javascript Question

Pushing items to same array Javascript

I have the following array, which is not really how it should be.

"people": [
{"name": "Bob"},
{"occupation": "King"}
]


If I put this data in a table, the info goes along a diagonal line, and not along the same line, like a normal table.

This result is generated by my routing code here:

user.people.push({'name': body.name });
user.occupation.push({'occupation': body.occupation });


I have tried this:

for (i = 0; i < people.length; i){
user.people[i].push({'name': body.name });
user.occupation[i].push({'occupation': body.occupation});
}


But this stops my POST request from working.

EDIT

This is done using Node. My schema in my user.js contains the following lines.

people: [{
name: String,
occupation: String
}]


In addition, my ejs rendered table is like so:

<% for (var i = 0; i < user.people.length; i++) {%>
<tr>
<td><%=user.people[i].name %></td>
<td><%=user.people[i].occupation %></td>
</tr>
<% } %>


Essentially what I want my array to look like is:

people: [{
name: Bob,
occupation: King
}]


So after testing, in my instance the solution turned out to be the following:

user.people.push(
{
'name': body.name,
'occupation': body.occupation
});


which goes to show that ample info was provided to solve this issue.

Answer

When you are accessing occupation, you call it through people[i].occupation:

<td><%=user.people[i].occupation %></td>

You need to do the same when editing it, like so:

user.people[i].occupation.push({'occupation': body.occupation});

or something like it.

EDIT:

Actually, come to think of it

user.people[i].push({'occupation': body.occupation});

Should do the trick.

Sorry, it's a little late over here.