【问题标题】:Modify Javascript object修改 Javascript 对象
【发布时间】:2019-07-22 12:18:12
【问题描述】:

我从 Lambda 函数获取 json 对象,但我希望前端使用不同的对象结构。

我在给定的代码下面写了 tieid,但到目前为止还没有 100% 成功。

我遗漏了一些小东西,但我得到了以下块:

var json  = data1.Items;

var jobcardJson = {"jobcards" : []};
var operationJson = {"Operation" : []};

var operation = [];
var i = 0;

var output = [];

for(var index = 0; index < json.length; index++) {

  var key = json[index];

  console.log(index); 

 operation[i] = {"op" : key["operationId"],"status" : key["operationStatus"],"isChecked " : "false","jobCard" : key["jobCardId"]};   

  var obj = {"jobCard" : key["jobCardId"],"mro" : key["mroID"],"operation" : operation};



  jobcardJson["jobcards"][i] = obj;
  i++;


}

console.log(jobcardJson);

在下面,你可以找到我当前的对象:

"Items": [
       {
          "jobCardId": "0010",
          "teamId": "A",
          "operationId": "5555",
          "mroID": "335"
        },
        {
          "jobCardId": "0011",
          "operationStatus": "INP",
          "teamId": "A",
          "operationId": "6666",
          "mroID": "337"
        },
        {
          "jobCardId": "0010",
          "operationStatus": "INP",
          "teamId": "A",
          "operationId": "5551",
          "mroID": "335"
        }
      ],
      "Count": 4,
      "ScannedCount": 4
    };

这是我的预期输出:

   jobcards: [ 
    {
    jobCard:"0010",
    mro:"335", 
    operation :[ 
        { 
         "operationStatus": "INP",
          "teamId": "A",
          "userStatus": "Completed",
          "operationId": "5555"
         }, 
        { 
        "operationStatus": "INP",
          "teamId": "A",
          "userStatus": "Completed",
          "operationId": "5551"
        } 
       ] 
    },
    {
    jobCard:"0011",
    mro:"337", 
    operation :[ 
        { 
         "operationStatus": "INP",
         "teamId": "A",
          "userStatus": "Completed",
          "operationId": "6666"
         }
        ] 
    },
] 

【问题讨论】:

  • 请格式化您的输入数据。

标签: javascript json object lambda javascript-objects


【解决方案1】:

使用reduce

const input = {
  "Items": [{
    "jobCardId": "0010",
    "teamId": "A",
    "operationId": "5555",
    "mroID": "335"
  }, {
    "jobCardId": "0011",
    "operationStatus": "INP",
    "teamId": "A",
    "operationId": "6666",
    "mroID": "337"
  }, {
    "jobCardId": "0010",
    "operationStatus": "INP",
    "teamId": "A",
    "operationId": "5551",
    "mroID": "335"
  }]
};

const output = Object.values(input.Items.reduce((accu, {
  jobCardId,
  mroID,
  ...rest
}) => {
  if (!accu[jobCardId]) {
    accu[jobCardId] = {
      jobCardId,
      mroID,
      operation: []
    };
  }
  accu[jobCardId].operation.push({
    "operationStatus": "INP",
    "userStatus": "Completed",
    ...rest
  });
  return accu;
}, {}));

console.log(output);

【讨论】:

  • 谢谢你的解决方案。我尝试过使用 lodsh,这也对我有用。
  • @HinaPatidar - 没有必要加载额外的代码。可以使用常规函数来实现此功能。
【解决方案2】:

您可以使用 reduce 来重组数据:

const {
  Items: items
} = {
  "Items": [{
    "jobCardId": "0010",
    "teamId": "A",
    "operationId": "5555",
    "mroID": "335"
  }, {
    "jobCardId": "0011",
    "operationStatus": "INP",
    "teamId": "A",
    "operationId": "6666",
    "mroID": "337"
  }, {
    "jobCardId": "0010",
    "operationStatus": "INP",
    "teamId": "A",
    "operationId": "5551",
    "mroID": "335"
  }],
  "Count": 4,
  "ScannedCount": 4
}

console.log(items.reduce((a, {
  operationStatus,
  teamId,
  operationId,
  mroID,
  jobCardId
}) => {
  const index = a.findIndex(a => jobCardId === a.jobCard)
  index + 1 ? a[index].operation.push({
    operationStatus,
    teamId,
    operationId,
    userStatus: "COMPLETED"
  }) : a.push({
    jobCard: jobCardId,
    mro: mroID,
    operation: [{
      operationStatus: operationStatus || 'INP',
      teamId,
      operationId,
      userStatus: "COMPLETED"
    }]
  })
  return a
}, []))

【讨论】:

  • 谢谢你的解决方案。我尝试过使用 lodsh,这也对我有用。也附上我的答案。
【解决方案3】:
Thank you for your solutions. As I also tried doing using lodsh js and it seems fast for me -

    const input = {
      "Items": [{
        "jobCardId": "0010",
        "teamId": "A",
        "operationId": "5555",
        "mroID": "335"
      }, {
        "jobCardId": "0011",
        "operationStatus": "INP",
        "teamId": "A",
        "operationId": "6666",
        "mroID": "337"
      }, {
        "jobCardId": "0010",
        "operationStatus": "INP",
        "teamId": "A",
        "operationId": "5551",
        "mroID": "335"
      }]
    };
        var newdata = _.reduce(input.Items,
            function( arr, item){

                  var index = _.findIndex(arr, { "jobCard" : item.jobCardId});

                  if(index > -1){
                    arr[index].operation.push(item);
                  } else {
                    arr.push({ "jobCard" : item.jobCardId,"mro" : item.mroID, "operation" : [item] });
                  }

                delete item.jobCardId;
                return arr;
            },
            []
            );

            var jobcards = { "jobcards" : newdata};

            console.log(jobcards);

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多