Rethinkdb将对象数组转换为单个对象
Rethinkdb convert an array of objects to a single object
如何转换以下内容:
[{
"name": "annoying data",
"status": "evil",
"frustration": [
{
"name": "foo",
"value": 1
},
{
"name": "bar",
"value": 2
},
{
"name": "baz",
"value": 3
}
]
}...]
到这个输出:
[{
"name": "annoying data",
"status": "evil",
"foo": 1,
"bar": 2,
"baz": 3
}...]
从重新考虑查询?
我们有一个存储的第三方API响应,我正试图将其转换为有用的东西。在我看来,有两件事我需要完成,以达到我的最终目标,正常的数据输出。
- 将
frustration
数组转换为以name
为键,value
为值的对象。 - 将新转换的
frustration
对象合并到父对象中。
对于第二步我有一个可能的解决方案:
.map(function(row) {
row.pluck('name', 'status').merge(row('frustration'))
})
但是我的第一步毫无进展。任何想法都非常感激!
当前完整查询(名称更改为保护…我!):
r.db('test').table('evil_things').map(function(row) {
var x = row('a')('tree')('children')
.nth(0)('children')
.nth(0)
.map(function(x) {
return x('children');
})
.concatMap(function(x) {
return x.pluck('name', 'value');
})
;
return {
'name': row('name'),
'status': row('status'),
'frustration': x
};
}).filter(function(row) {
return r.expr(['FOO','BAR','BAZ']).contains(row('name').upcase());
})
.orderBy('status');
你做得对。
您可以使用object
从数据的键值列表创建对象。但是object
接收一个参数列表,而不是一个数组,所以你需要args
。
frustation
是一个数组,每个文档作为对象,您需要一种方法将其转换为一个列表的扁平数组,这意味着从这个数组
[{key1: val1}, {key2: val2},...]
我们把它变成
[key1, val1, key2, val2,...]
为object
输入args
。这是concatMap
的工作。
让我们试试这个:
r.expr([{
"name": "annoying data",
"status": "evil",
"frustration": [
{
"name": "foo",
"value": 1
},
{
"name": "bar",
"value": 2
},
{
"name": "baz",
"value": 3
}
]
}])
.map(function(doc) {
return doc.pluck("name", "status").merge(
r.object(r.args(doc('frustration')
.concatMap(function(frustration) { return [frustration("name"), frustration("value")] })
))
)
})
结果:[
{
"bar": 2 ,
"baz": 3 ,
"foo": 1 ,
"name": "annoying data" ,
"status": "evil"
}
]
应该这样做:
.map(function(row) {
return row.pluck('name', 'status').merge(
row('frustration').map(function(x){ return [x['name'], x['value']]; }).coerceTo('object'))
})
相关文章:
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 仅使用文件对象选择单个文件
- 如何使用javascript从JSON访问单个对象
- 将一个对象集合映射到汇总集合的单个对象
- 高级布线和单个对象定义
- 嵌套描述函数中对象的单个mock(jasmine
- 如何在返回单个对象时递归使用 Array.prototype.find()
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- 基于单个属性从数组中获取唯一对象
- 从mongo返回的对象(findOne)中筛选/返回单个嵌套对象
- 如何在javascript中的单个对象中推送类似的索引类型键
- Knockout.js用单个json对象绑定一个可观察对象
- 访问单个 Json 对象中的元素
- 下划线分组依据单个方面与嵌套对象属性的比较
- NodeJS + mysql:选择返回单个对象的查询
- 单个页面中的多个会话对象
- 在javascript(Angularjs)中将对象数组转换为单个对象
- 在单个 Javascript 函数中处理多个 websocket 订阅,但只有一个连接对象
- 更改 JS 数组中的单个对象会更改所有元素
- 从 Web 服务返回单个 json 对象的数组