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");