I'm trying to loop through the data and get it to produce
[
{
odds: "2/3",
position: 1,
terms: "1/5"
},
{
odds: "4/1",
position: 1,
terms: "1/7"
}
]
<script>
var res = '{"count":"2","bettype":"double","position[0]":"1","oddsa[0]":"2","oddsb[0]":"3","placeodds[0]":"1/5","position[1]":"1","oddsa[1]":"4","oddsb[1]":"6","placeodds[1]":"1/7"}';
var line = {};
//
var getvals = JSON.parse(res);
var count = parseInt(getvals["count"]);
var i = 0;
const array = [];//new Array();
for(var i = 0;i < count;i )
{
line["odds"] = getvals["oddsa[" i "]"] '/' getvals["oddsb[" i "]"];
line["terms"] = getvals["placeodds[" i "]"];
line["position"] = getvals["position[" i "]"];
array.push(line);
}
console.log(array);
</script>
However this is the result I get from the above
[{
odds: "4/6",
position: "1",
terms: "1/7"
}, [circular object Object]]
I'm not a JS coder so trying to learn as I go however I've looked at a few other examples but I'm still having issues
CodePudding user response:
You need to create a new line
object every iteration of the loop. Otherwise you are modifying and pushing the same object reference over and over to the array
var res = '{"count":"2","bettype":"double","position[0]":"1","oddsa[0]":"2","oddsb[0]":"3","placeodds[0]":"1/5","position[1]":"1","oddsa[1]":"4","oddsb[1]":"6","placeodds[1]":"1/7"}';
//
var getvals = JSON.parse(res);
var count = parseInt(getvals["count"]);
var i = 0;
const array = []; //new Array();
for (var i = 0; i < count; i ) {
// create new object here
var line = {};
line["odds"] = getvals["oddsa[" i "]"] '/' getvals["oddsb[" i "]"];
line["terms"] = getvals["placeodds[" i "]"];
line["position"] = getvals["position[" i "]"];
array.push(line);
}
console.log(array);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
In the second "what do you want" object you don't get 4/1 with the logic you used because oddssa[1]
is 4
and oddsb[1]
is 6
so you'll get 4/6
The logic itself looks promising keep it up! But as soon as I specified an object inside loop I got the result you specified.
I also cleaned up, and added the template literals (backticks) so you wouldn't be so confused with the pluses to concat the strings, added a proper variable declaration (instead of var, use const/let standard) and changed to calling property getvals.count
because I would only use the form getvals[string] if the property name is actually a number or dash.
const res = '{"count":"2","bettype":"double","position[0]":"1","oddsa[0]":"2","oddsb[0]":"3","placeodds[0]":"1/5","position[1]":"1","oddsa[1]":"4","oddsb[1]":"6","placeodds[1]":"1/7"}';
const getvals = JSON.parse(res);
const count = parseInt(getvals.count);
const arr = [];
for(let i = 0;i < count;i ) {
const line = {
odds: getvals[`oddsa[${i}]`] "/" getvals[`oddsb[${i}]`],
terms: getvals[`placeodds[${i}]`],
position: getvals[`position[${i}]`]
}
arr.push(line)
}
console.log(arr)