Javascript 从对象数组创建简单数组&;另一个简单数组
我有一个json数组和一个简单数组。这个json中的每个对象都有三个键&另一个具有唯一值的简单数组Javascript 从对象数组创建简单数组&;另一个简单数组,javascript,arrays,Javascript,Arrays,我有一个json数组和一个简单数组。这个json中的每个对象都有三个键&另一个具有唯一值的简单数组 var jsonArr=[{ amount: "2", club: "xyz", member: "tmm" }, { amount: "3", club: "xyz", member: "tsj" }, { amount: "4", club: "xyz",
var jsonArr=[{
amount: "2",
club: "xyz",
member: "tmm"
},
{
amount: "3",
club: "xyz",
member: "tsj"
},
{
amount: "4",
club: "xyz",
member: "tsj"
},
{
amount: "5",
club: "ama",
member: "vbr"
},
{
amount: "6",
club: "ama",
member: "vbr"
},
{
amount: "7",
club: "crm",
member: "vbr"
},
{
amount: "8",
club: "mic",
member: "wjr"
}]
简单成员数组
var smpMember =['tmm','tsj','vbr','wjr']
简单的球杆阵列
var smpClub=['xyz','ama','crm','mic']
我打算为每个会员创建一个简单的金额值数组。如果会员订阅了俱乐部,它将添加其金额值,如果没有,它将为其分配一个零。
例如,成员tmm已订阅club xyz,因此其数组如下
var tmm =[2,0,0,0];
同样,vbr会员已两次订阅ama俱乐部。所以它的数组将是
var vbr =[0,11,0,0]; // 11 is sum of 6 & 5
所以每个成员都有一个数组
我试过什么
我正在循环从smpMember数组中获取每个成员,并检查每个json对象中是否存在该成员
for(var i=0,j=smapMember.length;i<j;i++){ // Loop through array of members & pick each member
for(var x=0,y=jsonArr.length;x<y;x++){ // Loop through jsaon array of objects
var _sAmt =0;
if(smapMember[i]==jsonArr[x].member){ // check if member exist
_sAmt =jsonArr[x].amount;
if(y > (x+1)){ // Check for last element
if(jsonArr[x].club ==jsonArr[x+1].club){
_sAmt +=jsonArr[x+1].amount;
}
else{
_sAmt =0
}
}
}
var tempArr.push(_sAmt);
}
for(var i=0,j=smapMember.length;i您可以使用array.map
var jsonArr=[{
金额:“2”,
俱乐部:“xyz”,
成员:“tmm”
}, {
金额:“3”,
俱乐部:“xyz”,
成员:“tsj”
}, {
金额:“4”,
俱乐部:“xyz”,
成员:“tsj”
}, {
金额:“5”,
俱乐部:“ama”,
成员:“vbr”
}, {
金额:“6”,
俱乐部:“ama”,
成员:“vbr”
}, {
金额:“7”,
俱乐部:“crm”,
成员:“vbr”
}, {
金额:“8”,
俱乐部:“麦克”,
成员:“wjr”
}];
函数getUniqueElements(数组、键){
//创建值数组
var temp=array.map(函数(项){
返回项[键]
});
//删除重复值
var结果=临时过滤器(功能(项目、索引){
返回温度索引(项目)=索引;
});
返回结果;
}
var clubar=getUniqueElements(jsonArr,俱乐部);
var memberArr=getUniqueElements(jsonArr,“成员”);
console.log(clubar,memberArr);
这对我很有用
var arr = [];
for(var i = 0; i < smpMember.length; i++ ){
arr[i] = {};
arr[i].name = smpMember[i];
arr[i].values = Array.apply(null, {length: smpClub.length}).map(function(){return 0;}, function(){return 0});
for(var j = 0; j < jsonArr.length; j++ ){
if(jsonArr[j].member === smpMember[i]){
var index = smpClub.indexOf(jsonArr[j].club);
arr[i].values[index] += parseInt(jsonArr[j].amount);
}
}
}
var arr=[];
对于(var i=0;i
I arr array您将拥有具有会员名称和会员金额数组的对象我认为您可以在会员和俱乐部之间创建邻接矩阵
var result = [];
for (var i = 0; i < smpMember.length; i++) {
var amt = [];
for (var j = 0; j < smpClub.length; j++) {
var club = smpClub[j];
var member = smpMember[i];
var amount = 0;
jsonArr.forEach(function (obj) {
if (obj.member == member && club == obj.club) {
amount += +obj.amount;
}
});
amt[j] = amount;
}
result[i] = amt;
}
console.log(result);
在这里使用会员和俱乐部索引,您可以获得金额
示例:
tmm -> 0
xyz -> 0
amount = 2
tsj -> 1
xyz -> 0
amount = 7
像这样的另一个版本
var result = {};
for (var i = 0; i < smpMember.length; i++) {
var amt = [];
for (var j = 0; j < smpClub.length; j++) {
var club = smpClub[j];
var member = smpMember[i];
var amount = 0;
jsonArr.forEach(function (obj) {
if (obj.member == member && club == obj.club) {
amount += +obj.amount;
}
});
amt[club] = amount;
}
result[member] = amt;
}
console.log(result);
按会员和俱乐部使用,您可以获得金额
例如:
console.log(result['tmm']['xyz']); //2
你会反对用面向对象的方式来编程吗?我觉得这种结构会从面向对象中受益。@OliverRadini你能详细说明一下吗bit@user2181397结果应该是什么?对于每个成员,应该是分隔的数组,或者应该是一个数组=[2,11,…]?嗯,通常对于这类数据来说,它有助于将事物分割成对象。我不是说它会100%更好,但它可能是处理这类数据的一种有用的方法。我可以试着做一个小提琴,作为一个快速的例子。这对你来说不会太有用:但它可能说明了我的意思。这个提琴中的代码会用到每一个项目,并创建一个成员身份对象。每个成员身份都有一个成员、一个俱乐部和一个金额。每个俱乐部都有一个成员身份数组。您可以浏览俱乐部数组并提取所需的任何数据,例如clubs['ama']。成员身份[0].member.name
为您提供俱乐部ama第一位会员的姓名。我可以在以后有更多时间时详细说明。
{ tmm: [ xyz: 2, ama: 0, crm: 0, mic: 0 ],
tsj: [ xyz: 7, ama: 0, crm: 0, mic: 0 ],
vbr: [ xyz: 0, ama: 11, crm: 7, mic: 0 ],
wjr: [ xyz: 0, ama: 0, crm: 0, mic: 8 ] }
console.log(result['tmm']['xyz']); //2