Javascript对象数组中的分组求和
基于我想要创建outputArray的inputArray,标记outputArray中的计算如下所示 第一组=物理+化学+数学 第2组=历史+地理 第3组=第一语言+第二语言 组总数=组1+组2+组3Javascript对象数组中的分组求和,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,基于我想要创建outputArray的inputArray,标记outputArray中的计算如下所示 第一组=物理+化学+数学 第2组=历史+地理 第3组=第一语言+第二语言 组总数=组1+组2+组3 var inputArray = [ { subject: 'Physics', marks: '60' }, { subject: 'History', marks: '35' }, { subject: 'Chemistry', marks: '50' }, { subje
var inputArray = [
{ subject: 'Physics', marks: '60' },
{ subject: 'History', marks: '35' },
{ subject: 'Chemistry', marks: '50' },
{ subject: 'Language First', marks: '70' },
{ subject: 'Geography', marks: '65' },
{ subject: 'Maths', marks: '40' },
{ subject: 'Language Second', marks: '50' },
.
.
.
];
var outputArray = [
{ subject: 'Group 1', marks: '150' },
{ subject: 'Group 2', marks: '100' },
{ subject: 'Group 3', marks: '120' },
{ subject: 'Group Total', marks: '370' },
.
.
.
];
您可以使用以下代码获取它:
for(var i in inputArray){
if(inputArray[i].subject == "Physics" || inputArray[i].subject == "Chemistry" || inputArray[i].subject == "Maths")
outputArray[0].marks+= Number(inputArray[i].marks);
else if(inputArray[i].subject == "History" || inputArray[i].subject == "Geography")
outputArray[1].marks+= Number(inputArray[i].marks);
else if(inputArray[i].subject == "Language Second" || inputArray[i].subject == "Language First")
outputArray[2].marks+= Number(inputArray[i].marks);
}
希望能有所帮助:)此建议适用于某些对象,一个作为对受试者组的引用,另一个作为对结果集的引用 首先,结果集是基于想要的组构建的。在此循环中,将生成引用 其次,将
输入阵列
循环,并将标记
添加到主题所在的组中<代码>标记也添加到组总数中
var-inputArray=[{科目:物理,成绩:60'},{科目:历史,成绩:35'},{科目:化学,成绩:50'},{科目:语言第一,成绩:70'},{科目:地理,成绩:65'},{科目:数学,成绩:40'},{科目:语言第二,成绩:50'},
分组={'group1':['Physics'、'Chemistry'、'math']、'group2':['History'、'Geography']、'group3':['Language First'、'Language Second']、'grouptotal':null},
reference=Object.create(null),
subjects=Object.create(空),
outputArray=Object.keys(groups).map(函数(k){
参考文献[k]={主题:k,标记:0};
isArray(groups[k])&&groups[k].forEach(函数(a){subjects[a]=k;});
返回引用[k];
});
forEach(函数(a){
参考[受试者[a.受试者]]分数+=+a.分数;
参考['Group Total'].分数+=+a.分数
});
控制台日志(输出阵列)
考虑使用对象.键
,数组.索引
函数和预定义的组映射
对象的以下解决方案:
var groupsMap = {
'Group 1': ['Physics','Chemistry','Maths'],
'Group 2': ['History','Geography'],
'Group 3': ['Language First','Language Second']
}, output = {'Group Total': 0}, keys = Object.keys(groupsMap), len = keys.length;
inputArray.forEach(function(obj){
for (var i = 0; i < len; i++) {
if (groupsMap[keys[i]].indexOf(obj['subject']) !== -1) {
this[keys[i]] = this[keys[i]] || 0;
this[keys[i]] += parseInt(obj['marks']);
this['Group Total'] += parseInt(obj['marks']);
break; // avoids redundant iterations
}
}
}, output);
var outputArray = Object.keys(output).map((k) => ({'subject': k, 'marks': output[k]}));
console.log(JSON.stringify(outputArray, 0, 4));
您似乎忘记在问题中包含问题。仍然没有问题…请阅读和。每个数组中的
…
是什么。。?它们是如何延伸的?3点的意思和数组中的其他对象一样,有10多个对象,但我没有全部提到,所以我使用了那个点。
[
{
"subject": "Group Total",
"marks": 370
},
{
"subject": "Group 1",
"marks": 150
},
{
"subject": "Group 2",
"marks": 100
},
{
"subject": "Group 3",
"marks": 120
}
]