Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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中数组的分组数组_Javascript_Arrays - Fatal编程技术网

javascript中数组的分组数组

javascript中数组的分组数组,javascript,arrays,Javascript,Arrays,我在寻找数组上的功能分组,并写了如下内容: var response = { "data": { "results": { "facebook": [ [ "Campaign Name", 'promo', 'id' ], [ "Sok_MPA_10Link_IntOnlineShoppingSites_1412", "pro

我在寻找数组上的功能分组,并写了如下内容:

var response = {
  "data": {
    "results": {
      "facebook": [
        [
          "Campaign Name",
          'promo',
          'id'
        ],
        [
          "Sok_MPA_10Link_IntOnlineShoppingSites_1412",
          "promo1",
          4
        ],
        [
          "PPLA",
          "promo1",
          9
        ],
        [
          "PPLA",
          "promo2",
          90
        ],
        [
          "Sok_MPA_10Link_IntOnlineShoppingSites_1412",
          "promo1",
          45,
          5
        ]
      ]
    }
  },
  "exception": null,
  "status": "OK",
  "sokratiRequestId": null,
  "json": null
};


var mapData = {};

$.map(response.data.results, function(value, key) {
  headers = value.shift();

  $.map(response.data.results[key], function(data) {
    $.each(headers, function(index, column) {
      if (index == headers.indexOf('id')) return true;

      if (mapData[column] == undefined) {
        mapData[column] = {};
      }
      if (mapData[column][data[index]] == undefined) {
        mapData[column][data[index]] = 0;
      }
      mapData[column][data[index]] += data[headers.indexOf('id')]
    });
  });
  console.log(mapData)
});
基本上,我想在数组中的多个字段上分组,比如[“活动名称”&promo']

有什么好办法可以实现吗

输出应为-

"Campaign Name": {
    PPLA: 99
    Sok_MPA_10Link_IntOnlineShoppingSites_1412: 49
},
"promo": {
    promo1: 58
    promo2: 90
}
笔记
答案应该完全在JS中-没有其他框架[No lodash]

对于数组、集合或JavaScript中的任何内容的基本操作,我建议使用像lodash这样的框架,它充满了项目中任何地方都需要的技巧:


最常用的方法是使用库进行数据操作,如

使用此库,您可以按如下方式对数据进行分组:

var result = _.chain(data)
    .groupBy("color")
    .pairs()
    .map(function(currentItem) {
        return _.object(_.zip(["color", "users"], currentItem));
    })
    .value();

我在JS上编写了一个小函数,它可能会帮助您:

function groupBy(collection, property) {

var i = 0, val, index,
    values = [], result = [];
for (; i < collection.length; i++) {
    val = collection[i][property];
    index = values.indexOf(val);
    if (index > -1)
        result[index].push(collection[i]);
    else {
        values.push(val);
        result.push([collection[i]]);
    }
}
return result;
编辑:

使用和一个对象作为结果。给定的
项用于组属性及其所需数据部分的索引,以获得子属性

var response={“数据”:{“结果”:{“facebook”:[“活动名称”,“促销”,“id”],[“Sok_MPA_10Link_InOnlineShoppingSites_1412”,“促销1”,促销4],“PPLA”,“促销1”,9],“PPLA”,“促销2”,90],“Sok_MPA_10Link_InOnlineShoppingSites__1412”,“促销1”,45,5]},“异常”:null,“状态”:“OK”,“sokratiRequestId”:null,“json”:null},
data=response.data.results.facebook,
结果={},
groups=data.shift();
pop();
结果=数据.reduce(函数(r,a){
组。forEach(函数(b,i){
r[b]=r[b]|{};
r[b][a[i]=(r[b][a[i]||0)+a[2];
});
返回r;
}, {});

document.write(“”+JSON.stringify(结果,0,4)+“”)如果数据模式非常固定:

var响应={
“数据”:{
“结果”:{
“facebook”:[
[
“活动名称”,
“宣传片”,
“身份证”
],
[
“Sok_MPA_10链接到在线购物网站_1412”,
“宣传1”,
4.
],
[
“PPLA”,
“宣传1”,
9
],
[
“PPLA”,
“推广2”,
90
],
[
“Sok_MPA_10链接到在线购物网站_1412”,
“宣传1”,
45,
5.
]
]
}
},
“异常”:空,
“状态”:“确定”,
“sokratiRequestId”:空,
“json”:空
};
var face=response.data.results.facebook;
//删除作为架构的第一行
face.shift();
//接收列的索引,返回分组和
var reduce=函数(索引){
返回面。减少((t,a)=>{
t[a[index]=(t[a[index]| | 0)+a[2];
返回t;
}, {});
}
//最终结果
var结果={
“活动名称”:减少(0),
“促销”:减少(1)
}

document.write(“”+JSON.stringify(结果,0,4)+“”)你的输出应该是什么样子?@RayonDabre check editI未能解释我猜。。。我想对数组的两个索引上的值进行分组。没有排序我有更新的问题。。如果你想要更多的信息,请告诉我。我想我也是这么做的。让我们来吧。
groupBy(myArray, "facebook");