首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将javascript对象转换为具有多个嵌套的数组

问尝试将javascript对象转换为具有多个嵌套的数组
EN

Stack Overflow用户
提问于 2020-01-05 06:29:57
回答 2查看 32关注 0票数 0

我有一个javascript对象,其中包含:

代码语言:javascript
复制
var object =[{"knowledgeTime":"20180101T235959","validTime":"20180101T235959","portfolioId":"Control","type":"EQUITY_OPEN_LONG","assetId":"A","strategyId":0,"quantity":1000,"cost":100000,"contractualSettleDate":"SPECIAL","commission":2.06,"fee":1.03,"managerId":0},{"knowledgeTime":"20180101T235959","validTime":"20180101T235959","portfolioId":"Control","type":"EQUITY_OPEN_LONG","assetId":"A","strategyId":0,"quantity":1000,"cost":100000,"contractualSettleDate":"SPECIAL","commission":2.06,"fee":1.03,"managerId":0}
代码语言:javascript
复制
const keyname = ['eventHeader'];

const result = keyname.reduce((acc, date, i) => {
  acc.push([keyname, data]);
  return acc;
}, []);





                          var json_object = JSON.stringify(result);
                          document.getElementById("Object").innerHTML = json_object;
                          $('.result').append('<div id ="alert" class="alert-success"><ul class="list-group" min-width:500px><li class="list-group-item active">Result Json</li><textarea class="form-control" cols="100" rows="10">{"records:"['+json_object+'</textarea></li></div>');
                        })
                    };
                    reader.onerror = function(event) {
                      console.error("File could not be read! Code " + event.target.error.code);
                    };
                    reader.readAsBinaryString(selectedFile);
              });


        });

所需的输出为:

代码语言:javascript
复制
{
  "records": [
    {
      "common": {
        "validTime": "20180101T121222",
        "knowledgeTime": "20180101T121222"

      },
      "eventHeader": {
        "portfolioId": "Collect Acquisition Disposition Transactions",
        "type": "EQUITY_OPEN_LONG"
      },
      "details": {
        "assetId": 12,
        "custodianAccountId": 0,
        "strategyId": 0,
        "quantity": 150,
        "cost": 5001.23,
        "contractualSettleDate": "SPECIAL",
        "commission": 2.05,
        "fee": 1.03,
        "managerId": 0,
        "basketId": 0
      }
    }

但是我得到的结果一点也不接近,因为我不知道如何将所需的3个数组键拼接到对象中的适当位置。

有没有人能帮上忙?我在ablo中得到的最接近的结果就是将一个eventHeader键放入对象中--但是不知道如何将portfolioId键值对连接到对象中。抱歉,如果这太新手了--但我真的很难理解这门语言。我有另一个版本,我尝试在stringify中使用regex替换,但也不起作用,我假设我需要拉入每个对象行-拼接在键中,然后是键值对-但无法弄清楚拼接。

EN

回答 2

Stack Overflow用户

发布于 2020-01-05 07:05:50

解决方案是:

代码语言:javascript
复制
var object =[{"knowledgeTime":"20180101T235959","validTime":"20180101T235959","portfolioId":"Control","type":"EQUITY_OPEN_LONG","assetId":"A","strategyId":0,"quantity":1000,"cost":100000,"contractualSettleDate":"SPECIAL","commission":2.06,"fee":1.03,"managerId":0},{"knowledgeTime":"20180101T235959","validTime":"20180101T235959","portfolioId":"Control","type":"EQUITY_OPEN_LONG","assetId":"A","strategyId":0,"quantity":1000,"cost":100000,"contractualSettleDate":"SPECIAL","commission":2.06,"fee":1.03,"managerId":0}];

const getObject = (array) => {
  const newArray = array.map(obj => {
    const { validTime, knowledgeTime, portfolioId, type, assetId, custodianAccountId, strategyId, quantity, cost, contractualSettleDate, commission, fee, managerId, basketId } = obj;
    const newObject = {
      common: { 
         validTime,
         knowledgeTime
      },
      eventHeader: {
        portfolioId,
        type
      },
      details: {
        assetId,
        custodianAccountId,
        strategyId,
        quantity,
        cost,
        contractualSettleDate,
        commission,
        fee,
        managerId,
        basketId
      }
    };
    return newObject;
  })
  return { records: newArray };
}
const requeiredOutput = getObject(object);
console.log(requeiredOutput);
票数 0
EN

Stack Overflow用户

发布于 2020-01-05 07:06:25

我不是百分之百确定你想要做什么,但如果它是我认为的,那么这是一个解决方案:

代码语言:javascript
复制
const sourceArray = [
  {
    knowledgeTime: '20180101T235959',
    validTime: '20180101T235959',
    portfolioId: 'Control',
    type: 'EQUITY_OPEN_LONG',
    assetId: 'A',
    strategyId: 0,
    quantity: 1000,
    cost: 100000,
    contractualSettleDate: 'SPECIAL',
    commission: 2.06,
    fee: 1.03,
    managerId: 0,
  },
  {
    knowledgeTime: '20180101T235959',
    validTime: '20180101T235959',
    portfolioId: 'Control',
    type: 'EQUITY_OPEN_LONG',
    assetId: 'A',
    strategyId: 0,
    quantity: 1000,
    cost: 100000,
    contractualSettleDate: 'SPECIAL',
    commission: 2.06,
    fee: 1.03,
    managerId: 0,
  },
];

const commonKeys = ['validTime', 'knowledgeTime'];
const eventHeaderKeys = ['portfolioId', 'type'];

function createNestedObj(obj) {
  const nestedObj = {common: {}, eventHeader: {}, details: {}};
  for (const [key, val] of Object.entries(obj)) {
    if (commonKeys.includes(key)) {
      nestedObj.common[key] = val;
    } else if (eventHeaderKeys.includes(key)) {
      nestedObj.eventHeader[key] = val;
    } else {
      nestedObj.details[key] = val;
    }
  }
  return nestedObj;
}

const output = {records: []};

for (const item of sourceArray) {
  const nestedObj = createNestedObj(item);
  output.records.push(nestedObj);
}

console.log(output);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59595414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档