Andre
Andre

Reputation: 638

How to push an object in a object - javascript

I have two ways to fill the same hidden input in a form

  1. Using an import CSV button
  2. Adding data using another inputs

When I use the first option, the hidden input is filled with this

for example:

correct data

[{"url":"http://www.restaurant.com","businessTypeId":"1"},{"url":"http://www.hotel.com","businessTypeId":"2"}]

and works correctly if I store this data

but when I use the second option, the input is filled with this:

incorrect data

{"url":"http://www.google.com","businessTypeId":"3"}

That's incorrect because it doesn't have [brackets] at the beginning neither at the end

Another problem is when I insert data and fill that hidden input (with the first way) and then I try to add more data using the second way, I get this

[{"url":"http://www.restaurant.com","businessTypeId":"1"}, 
{"url":"http://www.hotel.com","businessTypeId":"2"}], 
{"url":"http://www.google.com","businessTypeId":"3"}

the first 2 data was inserted using the first way, the third data was inserted using the 2nd way

all data should be inside those brackets []

how can I "open" the brackets to push new data and "close" them?

at the beginning of all the code, the variable starts like this

let placesArray = [];

after the first method, data is inserted using this

placesArray.push(JSON.stringify(csvResult));
document.getElementById('places').value = placesArray;

them, after the second method, data is inserted using this

 placesArray.push(JSON.stringify(placeData));
 console.log('placeData datatable ' + placeData);
 document.getElementById('places').value = placesArray;

Note: if I use the first method two times, brackets are duplicated, like this

[{"url":"http://www.restaurant.com","businessTypeId":"1"}
{"url":"http://www.hotel.com","businessTypeId":"2"}],
[{"url":"http://www.beauty-shop.com","businessTypeId":"3"},
{"url":"http://www.dentist.com","businessTypeId":"5"}]

I definitely need to "open" the object so that I can insert the new data and not go through this, how could I do that?

In the console.log, I have this for placeData [object Object], same result for csvResult, both are object

Upvotes: 0

Views: 1057

Answers (3)

Andre
Andre

Reputation: 638

SOLVED:

I erased all JSON.stringify and added it to every line when I push data into inputs

like this

document.getElementById('places').value = JSON.stringify(placesArray);

in all lines when this is used.

thanks to @hgb123

for prevent to accumulate [brackets[more brackets]] I used .flat()

placesArray = placesArray.flat()
document.getElementById('places').value = JSON.stringify(placesArray);

Upvotes: 0

hgb123
hgb123

Reputation: 14891

You could flatten the array before every value set

placesArray = placesArray.flat()
document.getElementById('places').value = placesArray;

Upvotes: 1

Phil
Phil

Reputation: 164809

Seems like csvResult is itself an array and as you stringify it and push it to placesArray, it doesn't look like the result you want.

I'd go with this instead

placesArray.push(...csvResult) // push each `csvResult` item into `placesArray`
document.getElementById('places').value = JSON.stringify(placesArray)

Upvotes: 0

Related Questions