Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用d3.js对多个字段进行分组_Javascript_D3.js_Grouping_Nest - Fatal编程技术网

Javascript 使用d3.js对多个字段进行分组

Javascript 使用d3.js对多个字段进行分组,javascript,d3.js,grouping,nest,Javascript,D3.js,Grouping,Nest,我正在尝试按两个字段对数据进行分组MessageGroupId和FlowId (但我想要一种广义的方法,以防我必须对2个以上的字段进行分组) 我的数据 [ { "Id": 46489, "Message": "Hi", "MessageGroupId": 46488, "FlowId": 99 }, { "Id": 46492, "Message": "Hi User", "MessageGroupId": 46490,

我正在尝试按两个字段对数据进行分组MessageGroupIdFlowId

(但我想要一种广义的方法,以防我必须对2个以上的字段进行分组)

我的数据

 [
  {
    "Id": 46489,
    "Message": "Hi",
    "MessageGroupId": 46488,
    "FlowId": 99
  },
  {
    "Id": 46492,
    "Message": "Hi User",
    "MessageGroupId": 46490,
    "FlowId": 100
  },
  {
    "Id": 46494,
    "Message": "Loan",
    "MessageGroupId": 46490,
    "FlowId": 101
  },
  {
    "Id": 46496,
    "Message": "Call",
    "MessageGroupId": 46490,
    "FlowId": 101
  }
]
所需输出

[
  {
    "MessageGroupId": 46488,
    "FlowId": 99,
    "values": [
      {
        "Id": 46489,
        "Message": "Hi",
        "MessageGroupId": 46488,
        "FlowId": 99
      }
    ]
  },
  {
    "MessageGroupId": 46490,
    "FlowId": 100,
    "values": [
      {
        "Id": 46492,
        "Message": "Hi User",
        "MessageGroupId": 46490,
        "FlowId": 100
      }
    ]
  },
  {
    "MessageGroupId": 46490,
    "FlowId": 101,
    "values": [
      {
        "Id": 46494,
        "Message": "Loan",
        "FlowId": 101,
        "MessageGroupId": 46490
      },
      {
        "Id": 46496,
        "Message": "Call",
        "FlowId": 101,
        "MessageGroupId": 46490
      }
    ]
  }
]
我知道d3.nest函数,但当我尝试使用多个键时

var nested_data = d3.nest()
.key(function(d) { return d.MessageGroupId; })
.key(function(d) { return d.FlowId; })
.entries(conversationData.Messages);
值彼此嵌套

    [
  {
    "key": "46488",
    "values": [
      {
        "key": "99",
        "values": [
          {
            "Id": 46489,
            "Message": "Hi",
            "MessageGroupId": 46488,
            "FlowId": 99
          }
        ]
      }
    ]
  },
  {
    "key": "46490",
    "values": [
      {
        "key": "100",
        "values": [
          {
            "Id": 46492,
            "Message": "Hi User",
            "MessageGroupId": 46490,
            "FlowId": 100
          }
        ]
      },
      {
        "key": "101",
        "values": [
          {
            "Id": 46494,
            "Message": "Loan",
            "MessageGroupId": 46490,
            "FlowId": 101
          },
          {
            "Id": 46496,
            "Message": "Call",
            "MessageGroupId": 46490,
            "FlowId": 101
          }
        ]
      }
    ]
  }
]
我怎样才能达到预期的输出

var数据=[
{
“Id”:46489,
“留言”:“你好”,
“MessageGroupId”:46488,
“FlowId”:99
},
{
“Id”:46492,
“消息”:“嗨,用户”,
“MessageGroupId”:46490,
“FlowId”:100
},
{
“Id”:46494,
“消息”:“贷款”,
“MessageGroupId”:46490,
“FlowId”:101
},
{
“Id”:46496,
“消息”:“呼叫”,
“MessageGroupId”:46490,
“FlowId”:101
}
]
var nested_data=d3.nest()
.key(函数(d){return d.MessageGroupId;})
.key(函数(d){返回d.FlowId;})
.条目(数据);
console.log(嵌套的_数据);

使用本机
javascript

用法

Array.prototype.groupBy = function (props) {
   var arr = this;
   var partialResult = {};

   arr.forEach(el=>{

       var grpObj = {};

       props.forEach(prop=>{
             grpObj[prop] = el[prop]
       });

       var key = JSON.stringify(grpObj);

       if(!partialResult[key]) partialResult[key] = [];

       partialResult[key].push(el);

   });

   var finalResult = Object.keys(partialResult).map(key=>{
      var keyObj = JSON.parse(key);
      keyObj.values = partialResult[key];
      return keyObj;
   })

   return finalResult;
}
arr.groupBy(['MessageGroupId','FlowId'])

来源

Array.prototype.groupBy = function (props) {
   var arr = this;
   var partialResult = {};

   arr.forEach(el=>{

       var grpObj = {};

       props.forEach(prop=>{
             grpObj[prop] = el[prop]
       });

       var key = JSON.stringify(grpObj);

       if(!partialResult[key]) partialResult[key] = [];

       partialResult[key].push(el);

   });

   var finalResult = Object.keys(partialResult).map(key=>{
      var keyObj = JSON.parse(key);
      keyObj.values = partialResult[key];
      return keyObj;
   })

   return finalResult;
}
片段

[
  {
    "MessageGroupId": 46488,
    "FlowId": 99,
    "values": [
      {
        "Id": 46489,
        "Message": "Hi",
        "MessageGroupId": 46488,
        "FlowId": 99
      }
    ]
  },
  {
    "MessageGroupId": 46490,
    "FlowId": 100,
    "values": [
      {
        "Id": 46492,
        "Message": "Hi User",
        "MessageGroupId": 46490,
        "FlowId": 100
      }
    ]
  },
  {
    "MessageGroupId": 46490,
    "FlowId": 101,
    "values": [
      {
        "Id": 46494,
        "Message": "Loan",
        "FlowId": 101,
        "MessageGroupId": 46490
      },
      {
        "Id": 46496,
        "Message": "Call",
        "FlowId": 101,
        "MessageGroupId": 46490
      }
    ]
  }
]
var arr=[{“Id”:46489,
“留言”:“你好”,
“MessageGroupId”:46488,
“FlowId”:99
},
{
“Id”:46492,
“消息”:“嗨,用户”,
“MessageGroupId”:46490,
“FlowId”:100
},
{
“Id”:46494,
“消息”:“贷款”,
“MessageGroupId”:46490,
“FlowId”:101
},
{
“Id”:46496,
“消息”:“呼叫”,
“MessageGroupId”:46490,
“FlowId”:101
}
]
Array.prototype.groupBy=函数(道具){
var arr=此;
var partialResult={};
arr.forEach(el=>{
var grpObj={};
props.forEach(prop=>{
grpObj[prop]=el[prop]
});
var key=JSON.stringify(grpObj);
如果(!partialResult[key])partialResult[key]=[];
部分结果[键]。推送(el);
});
var finalResult=Object.keys(partialResult.map)(key=>{
var keyObj=JSON.parse(key);
keyObj.values=部分结果[key];
返回keyObj;
})
返回最终结果;
}

log(arr.groupBy(['MessageGroupId','FlowId'))
编写一个函数,将d3.nest函数数据转换为您自己所需的格式。如何?我想做这件事的一般化方法,而不仅仅是2属性