Bowalav
Bowalav

Reputation: 1

How do I access value of an attribute with an object with no key pairs?

I am working with dynamoose and a query returns me the following output

  [ Document { cost: 100 },
  lastKey: undefined,
  count: 1,
  queriedCount: undefined,
  timesQueried: 1 ]

When I try to do typeof(output) , it returns Object

When I try to do Object.keys(output) , it returns [ '0', 'lastKey', 'count', 'queriedCount', 'timesQueried' ]

When I do Object.entries(output), it returns [ [ '0', Document { cost: 100 } ],[ 'lastKey', undefined ], [ 'count', 1 ], [ 'queriedCount', undefined ], [ 'timesQueried', 1 ] ]

For my use, I need to get an Object which looks like this {cost: 100} and currently I am using

JSON.parse(JSON.stringify(output))

which gives me

[ { cost: 100 } ]

I havent encountered an object without a key value pair (I'm self taught), so I do not know how to approach this problem. And the current method seems inefficient and kinda wrong. Please advice me how I can do it in a proper way

Upvotes: 0

Views: 629

Answers (1)

Alex Wayne
Alex Wayne

Reputation: 187184

JSON.stringify(output) //=> "[ { cost: 100 } ]"

What that means is that you have an array (denoted by []) with one item, which is an object (denoted by {}) with a single key cost.

Use [0] to get the first item in an array, and then use .cost to get the cost property.

console.log(output[0].cost) //=> 100

The reason that you are seeing other keys on that array is that it looks like that dynamoose library is adding some additional properties to the array before returning it. It's doing the equivalent of:

// vanilla js, not typescript
const output = [ { cost: 100 } ]
output.count = 1
output.timesQueried = 1

This gives the array properties in addition to the content. The dynamoose library appears to use this method to encode metadata about your queries alongside the returned data.

The default JSON serialization strategy for arrays does not serialize custom array properties, only the array members.

Upvotes: 1

Related Questions