javascript - 如何使用没有键对的对象访问属性的值?
问题描述
我正在使用 dynamoose,查询返回以下输出
[ Document { cost: 100 },
lastKey: undefined,
count: 1,
queriedCount: undefined,
timesQueried: 1 ]
当我尝试做时typeof(output)
,它会返回Object
当我尝试做时Object.keys(output)
,它会返回[ '0', 'lastKey', 'count', 'queriedCount', 'timesQueried' ]
当我这样做时Object.entries(output)
,它会返回[ [ '0', Document { cost: 100 } ],[ 'lastKey', undefined ], [ 'count', 1 ], [ 'queriedCount', undefined ], [ 'timesQueried', 1 ] ]
为了我的使用,我需要一个看起来像这样的对象,{cost: 100}
目前我正在使用
JSON.parse(JSON.stringify(output))
这给了我
[ { cost: 100 } ]
我还没有遇到没有键值对的对象(我是自学的),所以我不知道如何解决这个问题。目前的方法似乎效率低下而且有点错误。请告诉我如何以正确的方式做到这一点
解决方案
JSON.stringify(output) //=> "[ { cost: 100 } ]"
这意味着您有一个包含一个项目的数组(由 表示),它是一个具有单个 key[]
的对象(由 表示) 。{}
cost
用于[0]
获取数组中的第一项,然后用于.cost
获取成本属性。
console.log(output[0].cost) //=> 100
您在该数组上看到其他键的原因是,看起来 dynamoose 库在返回数组之前正在向数组添加一些额外的属性。它相当于:
// vanilla js, not typescript
const output = [ { cost: 100 } ]
output.count = 1
output.timesQueried = 1
除了内容之外,这还提供了数组属性。dynamoose 库似乎使用此方法将有关查询的元数据与返回的数据一起编码。
数组的默认 JSON 序列化策略不序列化自定义数组属性,仅序列化数组成员。
推荐阅读
- translate - 如何更改任务的语言?(艾泽拉斯核心)
- python - 写入新的 CSV 文件时缺少带有空格的行
- java - 如何从 json 数据模型中获取我的解析数据
- j - 等价的默示表达
- openshift - 如何在通过 minishift 启动并从存在 minishift 的机器访问时检索 openshift 私有 docker 注册表的 ip
- python - 在我的列表中,我想检测它的长度是 -1 还是 0,否则我希望它返回第二个 [1] 索引
- module - why my field field does not want to appear in my link menu?
- arrays - How to add text in an array using fs?
- java - 在 PreferenceScreen 中显示 ActionBar 看起来很乱
- spring-boot - How to secure spring Boot API with API key and secret