-2

I want to push the bottom object's contents into an array, like so:

var userArray = [{"xp":200,"level":3,"name":"User 1"},{"xp":300,"level":3,"name":"User 2"},{"xp":100,"level":3,"name":"User 3"},]

However, every time I try to use a for loop to do userArray.push(i), and push it into userArray, it returns [undefined, undefined, undefined].

{
    "1293818383": {
        "xp": 200,
        "level": 3,
        "name": "User 1"
    },
    "235489445527289867": {
        "xp": 300,
        "level": 1,
        "name": "User 2"
    },
    "123189273132": {
        "xp": 100,
        "level": 3,
        "name": "User 3"
    }
}

What am I doing wrong?

Jason Cust
  • 10,743
  • 2
  • 33
  • 45
ethanc
  • 137
  • 2
  • 12
  • 1
    Those are JavaScript objects. JSON is a string. https://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation –  May 23 '18 at 18:04
  • 2
    "every time I try to use a for loop to do " add your code plz How would we know what is `i` in `userArray.push(i)` – Yury Tarabanko May 23 '18 at 18:05

3 Answers3

4

Use Object.values which will return an array of a object's own enumerable property values,

var x = {
  "1293818383": {
    "xp": 200,
    "level": 3,
    "name": "User 1"
  },
  "235489445527289867": {
    "xp": 300,
    "level": 1,
    "name": "User 2"
  },
  "123189273132": {
    "xp": 100,
    "level": 3,
    "name": "User 3"
  }
}
console.log(Object.values(x))
brk
  • 48,835
  • 10
  • 56
  • 78
0

@etanc, please have a look at below code.

var json_obj = {
    "1293818383": {
        "xp": 200,
        "level": 3,
        "name": "User 1"
    },
    "235489445527289867": {
        "xp": 300,
        "level": 1,
        "name": "User 2"
    },
    "123189273132": {
        "xp": 100,
        "level": 3,
        "name": "User 3"
    }
}

var arr = [];
for(var key in json_obj) {
   arr.push(json_obj[key])
}

console.log(arr)
/*
 [{ xp: 200, level: 3, name: 'User 1' },
  { xp: 300, level: 1, name: 'User 2' },
  { xp: 100, level: 3, name: 'User 3' } ]
*/

If your data is huge then you won't be able look properly into the data until and unless you don't format it. Use JSON.stringify() to format the above o/p to view it in pretty form as follows.

JSON.stringify(arr, null, 4);
/*
[
    {
        "xp": 200,
        "level": 3,
        "name": "User 1"
    },
    {
        "xp": 300,
        "level": 1,
        "name": "User 2"
    },
    {
        "xp": 100,
        "level": 3,
        "name": "User 3"
    }
]
*/
hygull
  • 8,464
  • 2
  • 43
  • 52
0

You need to parse the JSON into a JS object to start. Then you can loop over the object.

// initial js object 
let initial = {"1293818383": {"xp": 200,"level": 3,"name": "User 1"}, "235489445527289867": {"xp": 300, "level": 1, "name": "User 2"}, "123189273132": {  "xp": 100, "level": 3, "name": "User 3" }
    }

// convert object to json -- THIS IS START OF QUESTION
let json = JSON.stringify(initial)

// intantiate userArray
var userArray = []

// parse json into js object
var parsed = JSON.parse(json)

for (let obj in parsed){
// use each key of object to get value
  userArray.push(parsed[obj])
}
console.log(userArray)
// [ { xp: 200, level: 3, name: 'User 1' }, { xp: 300, level: 1, name: 'User 2' }, { xp: 100, level: 3, name: 'User 3' } ]