Javascript 基于对象数组中不同单位的和值

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

我被困在这种情况下,我有类似的JSON响应

[{
    "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的最佳方式