【问题标题】:How to exchange the format of arrays? - javascript如何交换数组的格式? - javascript
【发布时间】:2018-09-25 10:38:31
【问题描述】:

这是我的 json 数据:

{
  "rows": [
    {
      "id": 3,
      "code": "airtel121",
      "position": "manager",
      "salary": "25000",
      "login": {
        "id": 4,
        "username": "sameer",
        "firstName": "Mohamed",
        "lastName": "Sameer",
        "code": "airtel121",
      }
    }
  ]
}

我的预期输出:

{
  "rows": [
    {
      "id": 4,
      "username": "sameer",
      "firstName": "Mohamed",
      "lastName": "Sameer",
      "code": "airtel121",
      "staffs": [
        {
          "id": 3,
          "code": "airtel121",
          "position": "manager",
          "salary": "25000",
        }
      ]
    },
  ]
}

我想将第一个对象作为人员交换到一个数组中,我不知道什么样的库或方法可以制作这些东西,

【问题讨论】:

  • 你可以使用这个库github.com/paularmstrong/normalizr
  • 您有尝试过吗?出了什么问题(以及以什么方式)?你在哪里卡住了?
  • 我没有尝试,我找了lodash库,但我没有找到方法,如果你可以分享方法名称或发布一些代码,我可以看看它,我会尝试我发布了我的尝试。
  • 不存在 JSON 对象。如果是object,它就是Javascript。如果是 JSON,则为 string

标签: javascript arrays json object


【解决方案1】:

像这样?您可以使用 ES 2018 Object spread 将所需的属性拉入对象文字中。

let a = {
  "rows": [
    {
      "id": 3,
      "code": "airtel121",
      "position": "manager",
      "salary": "25000",
      "login": {
        "id": 4,
        "username": "sameer",
        "firstName": "Mohamed",
        "lastName": "Sameer",
        "code": "airtel121",
      }
    }
  ]
}

let b = { "rows": [{ ...a.rows[0].login, "staffs": [ { ...a.rows[0] } ] } ] }

delete(b.rows[0].staffs[0].login)

console.log(b)

【讨论】:

  • 将循环结构转换为 JSON,我明白了。
【解决方案2】:

有多种方法可以解决这个问题。使用简单的 javascript,您可以这样做。

var data = {
  "rows": [
    {
      "id": 3,
      "code": "airtel121",
      "position": "manager",
      "salary": "25000",
      "login": {
        "id": 4,
        "username": "sameer",
        "firstName": "Mohamed",
        "lastName": "Sameer",
        "code": "airtel121",
      }
    }
  ]
}

var exchangedData = data["rows"].map((row) => {
  row["id"] = row["login"]["id"]
  row["username"] = row["login"]["username"]
  row["firstName"] = row["login"]["firstName"]
  row["lastName"] = row["login"]["lastName"]
  row["code"] = row["login"]["code"]
  row["staffs"] = [{ id: row["id"], code: row["code"], position: row["position"], salary: row["salary"]}]

  delete row["login"]
  delete row["position"]
  delete row["salary"]
  return row;
})

console.log(exchangedData)

【讨论】:

  • 有没有办法使用任何库?短代码?例如,如果我的对象中有超过 20 个键?它很难编码。
  • 是的,你可以使用上面提到的 normalizr 库。或者可以使用@connexo 分享的示例
【解决方案3】:
var rows = {
  "rows": [
    {
      "id": 3,
      "code": "airtel121",
      "position": "manager",
      "salary": "25000",
      "login": {
        "id": 4,
        "username": "sameer",
        "firstName": "Mohamed",
        "lastName": "Sameer",
        "code": "airtel121",
      }
    }
  ]
};

var data = {rows:[]}


rows.rows.forEach(function(value, index){

        data.rows.push(
    _.assign(
    {}, 
    {
      "id": value.login.id, 
      "username": value.login.username,
      "firstName": value.login.firstName, 
      "lastName": value.login.lastName,
      "code": value.login.code,
    },{"staffs":[{"id":value.id, "code":value.code, "position": value.position, "salary": value.salary}]})
)});

console.log(data);

【讨论】:

    【解决方案4】:

    我认为这是一个更简单的解决方案,可以处理行数组中的任意数量的对象。

    result = {
      "rows": [
        {
          "id": 3,
          "code": "airtel121",
          "position": "manager",
          "salary": "25000",
          "login": {
            "id": 4,
            "username": "sameer",
            "firstName": "Mohamed",
            "lastName": "Sameer",
            "code": "airtel121",
          }
        }
      ]
    }
    
    
    const data = result.rows.map(d => {
      const {id, code, position, salary} = d
      return Object.assign(d.login, {staffs: {...{id, code, position, salary}}})
    })
    
    console.log(data)

    【讨论】:

    • 如果我在对象中有很多键?有没有办法动态放置键。
    • Object.keys(result) 会将对象的键作为数组提供。是这个意思吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2010-10-26
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多