Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 myArrayID = []; myArrayID = ['1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', ........ '5']; //100 ID in myArrayID that has been sorted in order var myArrayScore = []; myArrayScore = ['100', '

我试图动态地检索、计算和存储数组中的一些信息

我所掌握的资料如下:

var myArrayID = [];
    myArrayID = ['1', '2', '3', '4', '5', '1', '2', '3', '4', '5', '1', ........ '5']; 
   //100 ID in myArrayID that has been sorted in order 

var myArrayScore = [];
    myArrayScore = ['100', '70', '80', '88', '23', '99', ....... '20'];
  //100 Score in myArrayScore that has been sorted in order
总之

myArrayID[0]
引用了
myArrayScore[0]
--->ID 1的得分为100

myArrayID[99]
引用了
myArrayScore[99]
--->ID5的得分为20分


我想在不使用硬编码方法的情况下获得每个ID的总分

我的方法是

var ID1 = 1;
var ID2 = 2;
var ID3 = 3;
var ID4 = 4;
var ID5 = 5;

var ID1Score = 0;
var ID2Score = 0;
var ID3Score = 0;
var ID4Score = 0;
var ID5Score = 0;

for(var i in myArrayID)
{
     if(myArrayID[i] === ID1)
     {
         ID1Score += myArrayScore[i];
     }
     if(myArrayID[i] === ID2)
     {
         ID1Score += myArrayScore[i];
     }
     if(myArrayID[i] === ID3)
     {
         ID1Score += myArrayScore[i];
     }
     if(myArrayID[i] === ID4)
     {
         ID1Score += myArrayScore[i];
     }
     if(myArrayID[i] === ID5)
     {
         ID1Score += myArrayScore[i];
     }     
}
这种方法可行,但它是硬编码的

我可以知道是否有任何方法可以动态编码吗


从某种意义上说,即使我的数组发生了变化(假设我有9个ID),但它仍然是按排序顺序排列的,并且仍然包含相同的长度。

尝试类似的方法

var outputMap = {};
myArray.forEach(function(val,index){
  outputMap[val] = outputMap[val] || 0;
  outputMap[val] += myArrayScore[index];
});
现在,
outputMap
将有一个针对每个ID的总分值

演示

var myArrayID=['1','2','3','4','5','1','2','3','4','5'];
var myArrayScore=['100','70','80','88','23','100','70','80','88','23'];
var outputMap={};
myArrayID.forEach(函数(val,index){
outputMap[val]=outputMap[val]| | 0;
outputMap[val]+=parseInt(myArrayScore[index],10);
});
document.body.innerHTML+=JSON.stringify(outputMap,0,4)
var myArrayID=['1','2','3','4','5','1','2','3','4','5'];
var myArrayScore=['100','70','80','88','23','100','70','80','88','23'];
var_f={};
myArrayID.forEach(函数(el,i){
如果(_f.hasOwnProperty(el)){
_f[el]+=+myArrayScore[i];
}
否则{
_f[el]=+myArrayScore[i];
}
});
警报(JSON.stringify(_f));
//第一名得分:
警惕(“第一分:+_f[“1”);
//第二名得分:

警惕(“第二分:+_f[“2”])您可以使用对象对结果进行分组和迭代

至少你需要转换成数字

var myArrayID=['1','2','3','4','5','1','2','3','4','5','1','5'],
myArrayScore=['100','70','80','88','23','99','20','8','9','10','11','12'],
分数={};
myArrayID.forEach(函数(索引){
分数[指数]=(分数[指数]| 0)++myArrayScore[指数]| 0;
});
document.write(''+JSON.stringify(分数,0,4)+'')