对象操作javascript

问题描述 投票:-2回答:1

我有一个很大的问题来操纵一个js对象。我有这个对象:

"daily_operator_trend": {
      "2018-08-01": {},
      "2018-08-02": {},
      "2018-07-16": {
        "1": 1,
        "2": 4,
        "3": 3
      },
      "2018-07-18": {
        "1": 1,
        "3": 7
      }
   }, 
  "operatorStats": [
    {
      "min_response_time": 5,
      "max_deepness": 3,
      "max_response_time": 5,
      "min_deepness": 3,
      "details": {
        "phoneNumber": "001122333",
        "allBots": true,
        "surname": "Sky",
        "nickname": "jesky",
        "name": "Je",
        "type": "owner",
        "operatorId": 1,
        "userId": "834f6de213c7d79bd64031371773b154",
        "email": "[email protected]",
        "maxConversation": -1,
        "botIdList": [
          "1ec0e59069561da21727e3a56d05ef2d",
          "0ddfc38f54f51f7b40e1057436b34a6f",
          "37c43963d3e716bc4e41e1e6a32ed7f1"
        ]
      },
      "avg_deepness": 3,
      "avg_response_time": 5
    }]

在daily_operator_trend中,我们有一个像datae这样的键,一个值是一个对象,在这个对象中,键是操作符id,值是会话的数量。我需要在一个新的对象数组中操纵和转换它,如下所示:

series: [ {name:'jesky', data:[0,0,1,1]}]

我正在尝试使用此代码:

 let columnDataConv = data.operatorStats.reduce(function(map, obj){
    let newObj = [];
    let cData = Object.keys(data.daily_operator_trend).reduce(function(m, o){

      m['name'] = '';
      m['data'] = [];
      for (let [key, value] of Object.entries(data.daily_operator_trend[o])){
        if (key == obj.details.operatorId){
          if ( obj.details.nickname in m){
            m['data'].push(value);

          }else {
            m['name']= obj.details.nickname;
            m['data'].push(value);
          }

        }else {
          m['data'].push(0);
        }
        newObj.push(m);
      }
    return newObj;
    }, {})

    map={...cData};     

    return map;
  }, {});

你能帮助我吗 ?

javascript reactjs object
1个回答
0
投票
const data = { 
"daily_operator_trend": {
          "2018-08-01": {
            "1": 1,
            "2": 4,
            "3": 3
          },
          "2018-08-02": {
            "1": 10,
            "2":15,
            "3":25
          },
          "2018-07-16": {
          },
},
  "operatorStats": [
        {
          "min_response_time": 5,
          "max_deepness": 3,
          "max_response_time": 5,
          "min_deepness": 3,
          "details": {
            "phoneNumber": "001122333",
            "allBots": true,
            "surname": "Sky",
            "nickname": "jesky",
            "name": "Je",
            "type": "owner",
            "operatorId": 1,
            "userId": "834f6de213c7d79bd64031371773b154",
            "email": "[email protected]",
            "maxConversation": -1,
            "botIdList": [
              "1ec0e59069561da21727e3a56d05ef2d",
              "0ddfc38f54f51f7b40e1057436b34a6f",
              "37c43963d3e716bc4e41e1e6a32ed7f1"
            ]
          },
          "avg_deepness": 3,
          "avg_response_time": 5
        },
        {
          "min_response_time": 4,
          "max_deepness": 2,
          "max_response_time": 1,
          "min_deepness": 2,
          "details": {
            "phoneNumber": "001122333",
            "allBots": true,
            "surname": "SkyWine",
            "nickname": "john",
            "name": "Jeremy",
            "type": "owner",
            "operatorId": 2,
            "userId": "834f6de213c7d79bd64031371773b155",
            "email": "[email protected]",
            "maxConversation": -1,
            "botIdList": [
              "1ec0e59069561da21727e3a56d05ef2d",
              "0ddfc38f54f51f7b40e1057436b34a6g",
              "37c43963d3e716bc4e41e1e6a32ed7f1"
            ]
          },
          "avg_deepness": 3,
          "avg_response_time": 5
        },
        {
          "min_response_time": 4,
          "max_deepness": 2,
          "max_response_time": 1,
          "min_deepness": 5,
          "details": {
            "phoneNumber": "001122333",
            "allBots": true,
            "surname": "SkyWine",
            "nickname": "Frank",
            "name": "Jeremy",
            "type": "owner",
            "operatorId": 3,
            "userId": "834f6de213c7d79bd64031371773b156",
            "email": "[email protected]",
            "maxConversation": -1,
            "botIdList": [
              "1ec0e59069561da21727e3a56d05ef2d",
              "0ddfc38f54f51f7b40e1057436b34a6f",
              "37c43963d3e716bc4e41e1e6a32ed7f2"
            ]
          },
          "avg_deepness": 3,
          "avg_esponse_time": 5
        }
      ]
};
function mergeNames (arr) {
    return _.chain(arr).groupBy('name').mapValues(function (v) {
        return _.chain(v).pluck('value').flattenDeep();
    }).value();
}



let newObj = [];
      let columnDataConv = data.operatorStats.reduce(function(map, obj){

        for (let [k,v] of Object.entries(data.daily_operator_trend)){

          for (let [key, value] of Object.entries(v)){
            let m = {};
            let dati = [];
            if (key == obj.details.operatorId){
             if(newObj.length > 0){
              for(let i = 0;i< newObj.length; ++i){
                if(newObj[i].name === obj.details.nickname){
                  dati=[];
                  dati.push(value);
                  newObj[i].data.push(...dati);
                  break;
                }else{
                  dati=[];
                  m = {};
                  m['name']= obj.details.nickname;
                  dati.push(value);
                  m['data']=dati;   
                  newObj.push(m); 
                    break;
                }             
               };
              }else{
                  dati=[];
                  m = {};
                  m['name']= obj.details.nickname;
                  dati.push(value);
                  m['data']=dati;   
                  newObj.push(m); 
                break;

              }           
            }        
          }           
        }

        map={...newObj};     

        return map;
      }, []);
console.log(columnDataConv);

现在我有了对象数组,但只有我的数组的第一个条目是正确的。为什么其他元素没有合并?

© www.soinside.com 2019 - 2024. All rights reserved.