Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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,我有一个json数组和一个简单数组。这个json中的每个对象都有三个键&另一个具有唯一值的简单数组 var jsonArr=[{ amount: "2", club: "xyz", member: "tmm" }, { amount: "3", club: "xyz", member: "tsj" }, { amount: "4", club: "xyz",

我有一个json数组和一个简单数组。这个json中的每个对象都有三个键&另一个具有唯一值的简单数组

 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