【问题标题】:Convert one JSON structure to another in JavaScript在 JavaScript 中将一种 JSON 结构转换为另一种
【发布时间】:2021-02-12 07:44:56
【问题描述】:

我在尝试将一种 JSON 结构转换为另一种时遇到问题。任何回应将不胜感激。我尝试了这个并且能够完成它,并查看了其他各种转换选项,但我正在寻找实现它的最佳方法。

// GIVEN
{
  Monday: {
    Transactions: [
      {Amount: 100, Status: "Cleared"},
      {Amount: 200, Status: "Pending"},
      {Amount: 300, Status: "Failed"}
    ]
  },
  Tuesday: {
    Transactions: [
      {Amount: 700, Status: "Cleared"},
      {Amount: 800, Status: "Pending"},
      {Amount: 900, Status: "Failed"}
    ]
  },
  Wednesday: {
    Transactions: [
      {Amount: 400, Status: "Cleared"},
      {Amount: 500, Status: "Pending"},
      {Amount: 600, Status: "Failed"}
    ]
  }
}

// DESIRED RESULT
{
  Cleared: {
    Transactions: [
      {Amount: 100, Day: "Monday"},
      {Amount: 700, Day: "Tuesday"},
      {Amount: 400, Day: "Wednesday"}
    ]
  },
  Pending: {
    Transactions: [
      {Amount: 200, Day: "Monday"},
      {Amount: 800, Day: "Tuesday"},
      {Amount: 500, Day: "Wednesday"}
    ]
  },
  Failed: {
    Transactions: [
      {Amount: 300, Day: "Monday"},
      {Amount: 900, Day: "Tuesday"},
      {Amount: 600, Day: "Wednesday"}
    ]
  }
}

【问题讨论】:

  • 请分享您尝试过的解决方案,以便社区可以帮助您解决您面临的问题
  • 这对我来说也是一件烦人的事情。你必须迭代。其次,我认为 GitHub 中有一个 util 库。不记得了。但是你可以尝试这样的事情。 stackoverflow.com/questions/23013573/swap-key-with-value-json

标签: javascript json


【解决方案1】:

试试这样的:

input = {
    Monday: {
        Transactions: 
        [{Amount: 100, Status: "Cleared"},
        {Amount: 200, Status: "Pending"},
        {Amount: 300, Status: "Failed"}]
  },
  Tuesday: {
        Transactions: 
        [{Amount: 700, Status: "Cleared"},
        {Amount: 800, Status: "Pending"},
        {Amount: 900, Status: "Failed"}]
  },
  Wednesday: {
        Transactions: 
        [{Amount: 400, Status: "Cleared"},
        {Amount: 500, Status: "Pending"},
        {Amount: 600, Status: "Failed"}]
  }
}

output = {
    Cleared: {
        Transactions: []
    },
    Pending: {
        Transactions: []
    },
    Failed: {
        Transactions: []
    }
}

for (const day in input) {
    for (const transaction of input[day].Transactions) {
        const status = transaction.Status;
        output[status].Transactions.push({
            Amount: transaction.Amount,
            Day: day
        });
    }
}

【讨论】:

    【解决方案2】:

    每当涉及到数据分组时,请始终使用reduce 方法。

    const given = { Monday: { Transactions: [{Amount: 100, Status: "Cleared"}, {Amount: 200, Status: "Pending"}, {Amount: 300, Status: "Failed"}] }, Tuesday: { Transactions: [{Amount: 700, Status: "Cleared"}, {Amount: 800, Status: "Pending"}, {Amount: 900, Status: "Failed"}] }, Wednesday: { Transactions: [{Amount: 400, Status: "Cleared"}, {Amount: 500, Status: "Pending"}, {Amount: 600, Status: "Failed"}] }};
    
    const result = Object.entries(given).reduce((a,[Day, v])=>{
        v.Transactions.forEach(({Amount, Status})=>{
            a[Status] ??= {Transactions:[]};
            a[Status].Transactions.push({Day, Amount});
        });
        return a;
    },{});
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      您可以使用嵌套的forEach 循环:

      const input = {Monday: {Transactions: [{Amount: 100,Status: "Cleared"},{Amount: 200,Status: "Pending"},{Amount: 300,Status: "Failed"}]},Tuesday: {Transactions: [{Amount: 700,Status: "Cleared"},{Amount: 800,Status: "Pending"},{Amount: 900,Status: "Failed"}]},Wednesday: {Transactions: [{Amount: 400,Status: "Cleared"},{Amount: 500,Status: "Pending"},{Amount: 600,Status: "Failed"}]}}
      
      const output = {
        Cleared: {Transactions: []},
        Pending: {Transactions: []},
        Failed: {Transactions: []}
      }
      
      Object.keys(input).forEach((day) => {
        input[day].Transactions.forEach((transaction) => {
          output[transaction.Status].Transactions.push(transaction)
        })
      })
      
      console.log(output)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-27
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多