我正在尝试动态检索,计算和存储数组中的一些信息。
我拥有的信息是:
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]
----> ID 5的得分为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),但它仍处于排序顺序,并且仍然包含相同的LENGTH。
答案 0 :(得分:1)
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(function(el, i){
if(_f.hasOwnProperty(el)){
_f[el] += +myArrayScore[i];
}
else{
_f[el] = +myArrayScore[i];
}
});
alert(JSON.stringify(_f));
// Score for first:
alert("1st Score: "+_f["1"]);
// Score for second:
alert("2nd Score: "+_f["2"]);
答案 1 :(得分:0)
尝试这样的事情
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(function(val,index){
outputMap[val] = outputMap[val] || 0;
outputMap[val] += parseInt(myArrayScore[index],10);
});
document.body.innerHTML += JSON.stringify(outputMap,0,4);
&#13;
答案 2 :(得分:0)
您可以使用对象对结果进行分组,并使用Array#forEach
进行迭代。
至少你需要转换为数字。
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'],
score = {};
myArrayID.forEach(function (index) {
score[index] = (score[index] || 0) + +myArrayScore[index] || 0;
});
document.write('<pre>' + JSON.stringify(score, 0, 4) + '</pre>');
&#13;