将数组转换为另一个数组

时间:2017-10-23 13:42:46

标签: javascript lodash

我想使用lodash 2.4.2将此数组转换为另一个数组:

权限将映射到角色中。我们不接触其他房产。

自:

      {

      "items": [
        {
          "_id": "admin",
          "authorities": [
            {
              "name": "ROLE_ADMIN"
            }
          ]
        },
        {
          "_id": "user",
          "authorities": [
            {
              "name": "ROLE_USER"
            }
          ]
        }
      ]
    }

到这个数组

    {

    "items": [
        {
          "_id": "admin",
          "roles": [

              "ROLE_ADMIN"

          ]
        },
        {
          "_id": "user",
          "role": [

              "ROLE_USER"

          ]
        }
      ]
    }
你可以帮我吗?

2 个答案:

答案 0 :(得分:0)

正如charlietfl所述,在以后的帖子中,您必须提供代码示例,以便您解决问题。

这是解决方案,非常简单:

const initialObject = {
  "items": [
    {
      "_id": "admin",
      "authorities": [
        {
          "name": "ROLE_ADMIN"
        }
      ]
    }, 
    {
      "_id": "user",
      "authorities": [
        {
          "name": "ROLE_USER"
        }
      ]
    }
  ]
}

const processedObject = _
  .map(initialObject.items, item => {
    return {
      _id: item._id,
      roles: _.map(item.authorities, a => a.name)
    }
  })

答案 1 :(得分:0)

这只是关键名称的重新映射。出于性能原因,我会尽量避免使用delete。您可以在此benchmark中看到性能差异,如果稍后对象被保留,则只使用“删除”。

for (var item of items) {
  item.roles =  item.authorities
  // possible but slow
  // delete item.authorities
  item.authorities = undefined
}

编辑:@vanelizarov代码甚至更好,如果你想避免对象本身的变异和清洁属性。但它也慢了。

vanelizarov code:   x 5,025,370 ops/sec ±1.30% (90 runs sampled)
my code:            x 31,583,811 ops/sec ±0.95% (92 runs sampled)