在JavaScript中遍历对象数组
我有一个如下所示的对象数组:在JavaScript中遍历对象数组,javascript,for-loop,Javascript,For Loop,我有一个如下所示的对象数组: var model = ([{ "MKT_BRAND_NAME": "LUX", "Brand_GRP": 783.52, "Category_GRP": 0.0, "SOV": 0.051, "MM": "10", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null }, { "MKT_BRAND_NAME": "LUX", "Brand_GRP": 356.12, "Category_
var model = ([{ "MKT_BRAND_NAME": "LUX", "Brand_GRP": 783.52, "Category_GRP": 0.0, "SOV": 0.051, "MM": "10", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null },
{ "MKT_BRAND_NAME": "LUX", "Brand_GRP": 356.12, "Category_GRP": 0.0, "SOV": 0.050, "MM": "11", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null },
{ "MKT_BRAND_NAME": "LUX", "Brand_GRP": 935.27, "Category_GRP": 0.0, "SOV": 0.23, "MM": "7 ", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null},
{ "MKT_BRAND_NAME": "LUX", "Brand_GRP": 3380.81, "Category_GRP": 0.0, "SOV": 0.15, "MM": "8 ", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null },
{ "MKT_BRAND_NAME": "LUX", "Brand_GRP": 3536.21, "Category_GRP": 0.0, "SOV": 0.15, "MM": "9 ", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null}
{ "MKT_BRAND_NAME": "PEARS", "Brand_GRP": 3380.81, "Category_GRP": 0.0, "SOV": 0.18, "MM": "8 ", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null },
{ "MKT_BRAND_NAME": "PEARS", "Brand_GRP": 3536.21, "Category_GRP": 0.0, "SOV": 0.17, "MM": "9 ", "QUARTER": "", "YYYY": "2014", "TargetGroupId": null}]);
我想显示特定MKT_品牌名称的SOV和MM值。我想将MKT_品牌名称分配给“键”,将MM和SOV对分配给“值”
var model = [{
"key": "Lux",
"values": [{MM:"10",SOV:0.015},
{MM:"11",SOV:0.050},
{MM:"7",SOV:0.23},
{MM:"8",SOV:0.15},
{MM:"9",SOV:0.15}]
}, {
"key": "Pears",
"values": [{MM:"8",SOV:0.018},
{MM:"9",SOV:0.017},
}];
谁能告诉我如何通过
JavaScript
中的for
循环来实现这一点 像这样使用reduce函数怎么样:
grouped = model.reduce(function(memo, o){
if (typeof(memo[o["MKT_BRAND_NAME"]]) == "undefined")
memo[o["MKT_BRAND_NAME"]] = [];
memo[o["MKT_BRAND_NAME"]].push({MM: o["MM"], SOV: o["SOV"]});
return memo;
}, {});
result = [];
for (var key in grouped) {
result.push({key: key, values: grouped[key]})
}
console.log(JSON.stringify(result, null, 4))
此函数满足您的要求:
function convert(model) {
var new_model = [];
for (var i = 0; i < model.length; i++) {
var model_record = model[i];
var matched_new_model_record = null;
for (var j = 0; j < new_model.length; j++) {
var new_model_record = new_model[j];
if (new_model_record.key === model_record.MKT_BRAND_NAME) {
matched_new_model_record = new_model_record;
break;
}
}
if (matched_new_model_record === null) {
matched_new_model_record = {key: model_record.MKT_BRAND_NAME, values: []};
new_model.push(matched_new_model_record);
}
matched_new_model_record.values.push({MM: model_record.MM, SOV: model_record.SOV});
}
return new_model;
}
函数转换(模型){
var新_模型=[];
对于(变量i=0;i
当我试图在控制台中运行您的代码时,我得到了一个错误,即“Undefined is not a function”(未定义不是函数)。这个问题的可能重复似乎与主题无关,因为它是另一个“为我操纵我的JS对象”在操作部分没有明显努力的提问。使用下划线的.groupBy
@torazaburo.U是正确的。我无法对MKT_品牌名称进行分组。你能告诉我如何在下面的代码中实现U.groupBy吗。@Soroush。我无法对MKT_品牌名称进行分组。当我为MKT_品牌名称传递多个值时,代码返回MM,每个MKT_品牌名称的SOV值。既然我有5个勒克斯值和2个梨值,你能告诉我如何对MKT_品牌名称进行分组。@KalpanaGupta,你对MKT_品牌名称进行分组的确切含义是什么?