循环Javascript数组中的对象并计算相似项

循环Javascript数组中的对象并计算相似项,javascript,arrays,foreach,counting,Javascript,Arrays,Foreach,Counting,我试图循环遍历一个对象数组,并在满足某些条件时获得特定键的类似值计数。我首先尝试在一个阵列(存储)上循环,但后来意识到条件必须是动态的。他们现在不是。我进入了人力资源和食品行业,但理想情况下,我希望能够制造这些变量。所以我循环遍历arrayC中的值,并针对这些值对存储进行交叉检查。如果我循环一次(在arrayC中只有一个值),它会工作,但不止如此,它会循环太多次,并给出错误的输出。试图获得与数据和服务相关的所有类似奖励属性的计数。例如,所有数据为“HR”和服务为“Food”的对象都将组合起来反映

我试图循环遍历一个对象数组,并在满足某些条件时获得特定键的类似值计数。我首先尝试在一个阵列(存储)上循环,但后来意识到条件必须是动态的。他们现在不是。我进入了人力资源和食品行业,但理想情况下,我希望能够制造这些变量。所以我循环遍历arrayC中的值,并针对这些值对存储进行交叉检查。如果我循环一次(在arrayC中只有一个值),它会工作,但不止如此,它会循环太多次,并给出错误的输出。试图获得与数据和服务相关的所有类似奖励属性的计数。例如,所有数据为“HR”和服务为“Food”的对象都将组合起来反映:{data:HR,Service:Food,DDR:3}

代码:

var arrayC=[“DDM”,“DDR”];
变量存储=[
{数据:'CT',服务:'Food',奖励:'DDM'},
{数据:'HR',服务:'Food',奖励:'DDM'},
{数据:'HR',服务:'Food',奖励:'DDR'},
{数据:'HR',服务:'Food',奖励:'DDR'},
{数据:'HR',服务:'Food',奖励:'DDR'}
];
var array1=[];
var arrayTest=[];
var jk={};
函数getIt(){
arrayC.forEach(函数(键、值){
$。每个(存储、功能(k、x){
//控制台日志(v.award);
如果(关键字==x.award&&x.data==HR&&x.service==Food){
jk[x.award]=jk.hasOwnProperty(x.award)?arrayTest.push(x.award):arrayTest.push(x.award),
jk.data=x.data,
jk.service=x.service
} 
})//每个内部
});
//阵列1.推力(jk);
返回jk;
}
var newThing=getIt();
控制台日志(newThing);
//输出:
//反对{
//数据:“人力资源”,
//DDM:1,
//复员方案:4,
//服务:“食物”
//}

您可以构建一个包含所需密钥计数的嵌套对象

var storage=[{数据:'CT',服务:'Food',奖励:'DDM'},{数据:'HR',服务:'Food',奖励:'DDR'},{数据:'HR',服务:'Food',奖励:'DDR'},{数据:'HR',服务:'Food',奖励:'DDR'},{,
密钥=[“数据”、“服务”、“奖励”],
计数=存储。减少(功能(r,o){
var last=o[keys[keys.length-1]],
参考=键
.slice(0,-1)
.reduce(函数(q,k){return q[o[k]]=q[o[k]]|{},r);
参考文献[last]=(参考文献[last]| 0)+1;
返回r;
}, {});

控制台日志(计数)您可以使用所需密钥的计数构建嵌套对象

var storage=[{数据:'CT',服务:'Food',奖励:'DDM'},{数据:'HR',服务:'Food',奖励:'DDR'},{数据:'HR',服务:'Food',奖励:'DDR'},{数据:'HR',服务:'Food',奖励:'DDR'},{,
密钥=[“数据”、“服务”、“奖励”],
计数=存储。减少(功能(r,o){
var last=o[keys[keys.length-1]],
参考=键
.slice(0,-1)
.reduce(函数(q,k){return q[o[k]]=q[o[k]]|{},r);
参考文献[last]=(参考文献[last]| 0)+1;
返回r;
}, {});

控制台日志(计数)您可以使用reduce以及数据和服务组合字符串作为键进行计数

var存储=[
{数据:'CT',服务:'Food',奖励:'DDM'},
{数据:'HR',服务:'Food',奖励:'DDM'},
{数据:'HR',服务:'Food',奖励:'DDR'},
{数据:'HR',服务:'Food',奖励:'DDR'},
{数据:'HR',服务:'Food',奖励:'DDR'}
];
var res=存储。减少(函数(x,cur){
让项目=当前数据+当前奖励
如果(!x[item])x[item]=0;
x[项目]=x[项目]+1
返回x
}, {})
var结果=[]
for(常数键在res中){
const count=res[key];
const data=key.slice(0,2)
const service=key.slice(2)
结果:推({
数据:数据,
服务:服务,,
计数:计数
})
}

console.log(results)
您可以使用reduce以及数据和服务组合字符串作为键进行计数

var存储=[
{数据:'CT',服务:'Food',奖励:'DDM'},
{数据:'HR',服务:'Food',奖励:'DDM'},
{数据:'HR',服务:'Food',奖励:'DDR'},
{数据:'HR',服务:'Food',奖励:'DDR'},
{数据:'HR',服务:'Food',奖励:'DDR'}
];
var res=存储。减少(函数(x,cur){
让项目=当前数据+当前奖励
如果(!x[item])x[item]=0;
x[项目]=x[项目]+1
返回x
}, {})
var结果=[]
for(常数键在res中){
const count=res[key];
const data=key.slice(0,2)
const service=key.slice(2)
结果:推({
数据:数据,
服务:服务,,
计数:计数
})
}

console.log(results)
此数据示例的预期输出是什么?抱歉,忘了提及,我无法使用ECMAScript 5。它不支持=>但我可能能够转换它。这个数据示例的预期输出是什么?抱歉,忘了提一下,我一直在使用ECMAScript 5。它不支持=>但我可能可以转换它。谢谢,xdeep,对不起,忘了提一下,我一直在使用ECMAScript 5。它不支持=>但我可能能够转换它。我注意到它只是在拉DDR。谢谢,xdeepakv,我必须将其标记为更正确,因为它确实回答了这个问题,并提供了一个基于我问题中的最终格式JSON(最终目标)的工作示例。谢谢,伙计!!继续编码?!!谢谢,xdeep,对不起,忘了提一下,我一直在使用ECMAScript 5。它不支持=>但我可能能够转换它。我注意到它只是在拉DDR。谢谢,xdeepakv,我必须将其标记为更正确,因为它确实回答了这个问题,并提供了一个基于我问题中的最终格式JSON(最终目标)的工作示例。谢谢,伙计!!保持CODI