Javascript 将对象数组转换为单个对象

Javascript 将对象数组转换为单个对象,javascript,functional-programming,rethinkdb,nosql,Javascript,Functional Programming,Rethinkdb,Nosql,如何转换以下内容: [{ "name": "annoying data", "status": "evil", "frustration": [ { "name": "foo", "value": 1 }, { "name": "bar", "value": 2 }, { "name": "baz", "value": 3 } ] }...] 对于此输出: [{

如何转换以下内容:

[{
  "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响应,我正试图将其转换为有用的东西。在我看来,我需要完成两件事才能达到我的最终目标,即正常的数据输出

  • 使用
    名称
    作为键,使用
    作为值,将
    数组转换为对象
  • 将新转换的
    对象合并到父对象中
  • 对于步骤2,我有一个可能的解决方案:

    .map(function(row) {
        row.pluck('name', 'status').merge(row('frustration'))
    })
    
    但我的第一步一事无成。任何想法都非常感谢

    当前完整查询(名称更改为保护…我!):


    像这样的方法应该会奏效:

    .map(function(row) {
      return row.pluck('name', 'status').merge(
        row('frustration').map(function(x){ return [x['name'], x['value']]; }).coerceTo('object'))
    })
    

    你的方式是正确的

    您可以使用
    object
    从数据的键值列表创建对象。但是
    object
    接收参数列表,而不是数组,因此需要
    args

    frustation
    是一个数组,每个文档都是对象,您需要一种方法将其转换为一个扁平数组列表,这意味着从这个数组开始

    [{key1:val1},{key2:val2},…]

    我们把它转到

    [key1,val1,key2,val2,…]

    对象
    输入
    参数
    。这就是
    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"
    }
    ]
    

    希望能有所帮助:

    太棒了,谢谢你朝着正确的方向努力。嘿,史高丽,你可以在这本书上读到更多关于这方面的内容(顺便说一句,我的书):太棒了!为我节省了这么多时间:)对于javascript,它必须是
    return[x('name')、x('value')]
    [
    {
    "bar": 2 ,
    "baz": 3 ,
    "foo": 1 ,
    "name":  "annoying data" ,
    "status":  "evil"
    }
    ]