Javascript 基于对象数组中不同单位的和值
我被困在这种情况下,我有类似的JSON响应Javascript 基于对象数组中不同单位的和值,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我被困在这种情况下,我有类似的JSON响应 [{ "product": "CLINISod", "potentiation": "BIOLOGICALLY ACTIVE", "dose": "2 acs", "period": "all", "in": "Morning" }, { "product": "CLINISod", "potentiation": "BIOLOGICALLY ACTIVE", "dose": "1 acs
[{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "2 acs",
"period": "all",
"in": "Morning"
}, {
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "1 acs",
"period": "all",
"in": "Evening"
}, {
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "2 cs",
"period": "all",
"in": "Morning"
}, {
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "1 cs",
"period": "all",
"in": "Evening"
}];
所以,我想得到dose
键,它有quantity+unit
,但是使用jQuery的响应我想得到结果
e、 g.-3 Acs,3 cs.在这个问题上不需要jQuery,只需使用JSON.parse:
var response; // This is your json string from server.
var responseObject = JSON.parse(response);
// Get the keys with responseObject[i].dose, where i = the index in the array, i.e:
console.log(responseObject[0].dose); // prints "2 acs"
在这个问题上不需要jQuery,只需使用JSON.parse:
var response; // This is your json string from server.
var responseObject = JSON.parse(response);
// Get the keys with responseObject[i].dose, where i = the index in the array, i.e:
console.log(responseObject[0].dose); // prints "2 acs"
您可以使用迭代对象数组,并创建和存储结果的对象
// An object to store the result
var result = {};
// Iterate over array of objects
arr.forEach(function(obj) {
// Extract quantity & unit
var quantity = parseInt(obj.dose.match(/\d+/)[0], 10),
unit = obj.dose.replace(/\d+/, '').trim();
// If the unit already exists in the result object
// Add the quantity to it
// else
// Store the quantity
result[unit] = result[unit] ? result[unit] + quantity : quantity;
});
var-arr=[{
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 acs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 acs”,
“期间”:“全部”,
“在”:“晚上”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 cs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 cs”,
“期间”:“全部”,
“在”:“晚上”
}];
var result={};
arr.forEach(功能(obj){
变量数量=parseInt(对象剂量匹配(/\d+/)[0],10),
单位=目标剂量替换(/\d+/,'').trim();
结果[单位]=结果[单位]?结果[单位]+数量:数量;
});
控制台日志(结果)代码>您可以使用在对象数组上迭代,并创建和存储结果的对象
// An object to store the result
var result = {};
// Iterate over array of objects
arr.forEach(function(obj) {
// Extract quantity & unit
var quantity = parseInt(obj.dose.match(/\d+/)[0], 10),
unit = obj.dose.replace(/\d+/, '').trim();
// If the unit already exists in the result object
// Add the quantity to it
// else
// Store the quantity
result[unit] = result[unit] ? result[unit] + quantity : quantity;
});
var-arr=[{
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 acs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 acs”,
“期间”:“全部”,
“在”:“晚上”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 cs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 cs”,
“期间”:“全部”,
“在”:“晚上”
}];
var result={};
arr.forEach(功能(obj){
变量数量=parseInt(对象剂量匹配(/\d+/)[0],10),
单位=目标剂量替换(/\d+/,'').trim();
结果[单位]=结果[单位]?结果[单位]+数量:数量;
});
控制台日志(结果)代码>您可以使用以下代码。希望这对你有帮助
var list = [
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "2 acs",
"period": "all",
"in":"Morning"
},
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "1 acs",
"period": "all",
"in":"Evening"
},
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "2 cs",
"period": "all",
"in":"Morning"
},
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "1 cs",
"period": "all",
"in":"Evening"
}
];
var acsSum = 0;
var csSum = 0;
$.each(Object.keys(list), function(index,value){
if(list[index].dose.indexOf("acs") != -1)
{
acsSum = acsSum + Number(list[index].dose.split(" ")[0]);
}
else
{
csSum = csSum + Number(list[index].dose.split(" ")[0]);
}
});
console.log(acsSum + " acs");
console.log(csSum + " cs");
console.log-1的结果:3个acs
console.log-2的结果:3 cs您可以使用以下代码。希望这对你有帮助
var list = [
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "2 acs",
"period": "all",
"in":"Morning"
},
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "1 acs",
"period": "all",
"in":"Evening"
},
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "2 cs",
"period": "all",
"in":"Morning"
},
{
"product": "CLINISod",
"potentiation": "BIOLOGICALLY ACTIVE",
"dose": "1 cs",
"period": "all",
"in":"Evening"
}
];
var acsSum = 0;
var csSum = 0;
$.each(Object.keys(list), function(index,value){
if(list[index].dose.indexOf("acs") != -1)
{
acsSum = acsSum + Number(list[index].dose.split(" ")[0]);
}
else
{
csSum = csSum + Number(list[index].dose.split(" ")[0]);
}
});
console.log(acsSum + " acs");
console.log(csSum + " cs");
console.log-1的结果:3个acs
console.log-2的结果:3个cs
var rawData=[{
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 acs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 acs”,
“期间”:“全部”,
“在”:“晚上”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 cs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 cs”,
“期间”:“全部”,
“在”:“晚上”
}];
var objectHash={};
rawData.forEach(函数(产品){
var分解=产品剂量分割(“”);
var单位=细分[1];
var数量=数量(细分[0]);
objectHash[unit]=objectHash[unit]| 0;
objectHash[单位]+=数量;
});
函数转换器阵列(obj){
返回Object.keys(obj).map(函数(键){
返回obj[键]+''+键;
})
}
var results=converToArray(objectHash);
控制台日志(结果)代码>
var rawData=[{
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 acs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 acs”,
“期间”:“全部”,
“在”:“晚上”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“2 cs”,
“期间”:“全部”,
“在”:“上午”
}, {
“产品”:“CLINISod”,
“增强”:“生物活性”,
“剂量”:“1 cs”,
“期间”:“全部”,
“在”:“晚上”
}];
var objectHash={};
rawData.forEach(函数(产品){
var分解=产品剂量分割(“”);
var单位=细分[1];
var数量=数量(细分[0]);
objectHash[unit]=objectHash[unit]| 0;
objectHash[单位]+=数量;
});
函数转换器阵列(obj){
返回Object.keys(obj).map(函数(键){
返回obj[键]+''+键;
})
}
var results=converToArray(objectHash);
控制台日志(结果)代码>这不是OP想要的结果,例如-3个Acs,3个CST这不是OP想要的结果,例如-3个Acs,3个csThanks,但我想要2acs+1acs=3acs&2cs+1cs=3cs。索引查找比使用散列映射然后组装数组成本更高。您可以检查jsprefs,也可以三思而后行。谢谢,但我想要2acs+1acs=3acs&2cs+1cs=3cs。索引查找比使用哈希映射然后组装数组成本更高。您可以检查jspref,也可以考虑两次。有趣的是,当OP请求数组时,接受的答案会给出一个对象。对于一个简单的函数,您使用了两次正则表达式。每次在foreach中都要定义regex,这是一个巨大的开销。但这是公认的答案。@AhmadBamieh OP并没有明确要求数组,IMO对象是执行此类操作的最佳方式。另外,OP已经接受了这个答案,这意味着这就是他想要的。他要求像3个Acs,3个cs这样的东西。对我来说简直是一个阵列。OP对JS和此类代码的性能损失一无所知。@AhmadBamieh要获得数组,请在上述代码末尾添加。我还更新了答案。有趣的是,当OP要求数组时,接受的答案给出了一个对象。对于一个简单的函数,您使用了两次正则表达式。每次在foreach中都要定义regex,这是一个巨大的开销。但这是公认的答案。@AhmadBamieh OP并没有明确要求数组,IMO对象是这种OP的最佳方式