我有几个对象,我想创建一个“映射”数组来存储带有一个字段键的对象作为一个数组,该数组将具有两个输入和一个值字段。值字段将是每个具有相同“键”属性的地图的总和。我尝试了一些解决方案,但没有成功。
var myJSON = [{
TimeCheck : '201908',
service : null,
TotalAmount : 0
},
{
TimeCheck : '201907',
service : 'License',
TotalAmount : 5000000
},
{
TimeCheck : '201908',
service : 'License',
TotalAmount : 5000000
},
{
TimeCheck : '201908',
service : 'Package',
TotalAmount : 1200000
},
{
TimeCheck : '201908',
service : 'Package',
TotalAmount : 3000000
}]
var labels = [], dataPackage = [], dataLisence = [];
var TotalAmountP = 0;
var TotalAmountL = 0;
var map = [{ key : ['Service','TimeCheck'], value : 0 }];
for (var i = 0; i < myJSON.length; i++) {
if (labels.indexOf(myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2)) == -1) {
labels.push(myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2));
map[i].key[1] = myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2);
}
if (myJSON[i].Service == "Package") {
map[i].key[0] = myJSON[i].Service;
for (var j = 0; j < map.length; j++) {
if (map[i].key[0] !== map[j].key[0] && map[i].key[1] !== map[j].key[1]) {
map[i].key[0] = myJSON[i].Service;
map[i].value = myJSON[i].TotalAmount;
} else {
var newValue = map[j].value + myJSON[i].TotalAmount
map[j].value = newValue;
}
}
}
else if (myJSON[i].Service == "License") {
map[i].key[0] = myJSON[i].Service;
for (var j = 0; j < map.length; j++) {
if (map[i].key[0] !== map[j].key[0] && map[i].key[1] !== map[j].key[1]) {
map[i].key[0] = myJSON[i].Service;
map[i].value = myJSON[i].TotalAmount;
} else {
var newValue = map[j].value + myJSON[i].TotalAmount
map[j].value = newValue;
}
}
}
}
地图数组应具有两个值:
map[0] = {
key: ['Package','201907'],
value: 4200000}
map[1] = {
key: ['License','201907'],
value: 5000000}
以此类推。
答案 0 :(得分:0)
您说map数组只有两个值:在您的代码中,它仅使用一个值(索引为0)初始化。但是您要使用变量public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
app.UseMiddleware<UserDataLoggingMiddleware>();
// ...
app.UseMvc();
}
进行迭代,直到i
的长度为止,其中有5个值。因此,当您访问myJSON
并且map[i].key
是i
时,1
是未定义的。
答案 1 :(得分:0)
您要在长度超过myJSON
的{{1}}上进行迭代。因此,您将不会访问map
,而从map[3]
找不到key
检查以下解决方案。
undefined
答案 2 :(得分:0)
第一步是使地图数组结构的长度等于myJSON值5,那么只有您才能迭代地图数组。
var map = [];
for (var i = 0; i < myJSON.length; i++) {
map.push({ key : ['service','TimeCheck'], value : 0 });
}
您在代码中犯的另一个错误是键名不是myJSON [i] .Service。 实际上是myJSON [i] .service 's'应该更小,键名不区分大小写
如果条件不知道在条件内添加相同内容的确切原因,我也删除了以下内容。您也可以根据需要进行选择。
map[i].key[1] = myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2);
var myJSON = [{
TimeCheck : '201908',
service : null,
TotalAmount : 0
},
{
TimeCheck : '201907',
service : 'License',
TotalAmount : 5000000
},
{
TimeCheck : '201908',
service : 'License',
TotalAmount : 5000000
},
{
TimeCheck : '201908',
service : 'Package',
TotalAmount : 1200000
},
{
TimeCheck : '201908',
service : 'Package',
TotalAmount : 3000000
}]
var labels = [], dataPackage = [], dataLisence = [];
var TotalAmountP = 0;
var TotalAmountL = 0;
var map = [];
for (var i = 0; i < myJSON.length; i++) {
map.push({ key : ['service','TimeCheck'], value : 0 });
}
for (var i = 0; i < myJSON.length; i++) {
if (labels.indexOf(myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2)) == -1) {
labels.push(myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2));
//map[i].key[1] = myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2);
}
map[i].key[1] = myJSON[i].TimeCheck.substr(0, 4) + '/' + myJSON[i].TimeCheck.substr(4, 2);
if (myJSON[i].service === "Package") {
map[i].key[0] = myJSON[i].service;
for (var j = 0; j < map.length; j++) {
if (map[i].key[0] !== map[j].key[0] && map[i].key[1] !== map[j].key[1]) {
map[i].key[0] = myJSON[i].service;
map[i].value = myJSON[i].TotalAmount;
} else {
var newValue = map[j].value + myJSON[i].TotalAmount
map[j].value = newValue;
}
}
}
else if (myJSON[i].service === "License") {
map[i].key[0] = myJSON[i].service;
for (var j = 0; j < map.length; j++) {
if (map[i].key[0] !== map[j].key[0] && map[i].key[1] !== map[j].key[1]) {
map[i].key[0] = myJSON[i].service;
map[i].value = myJSON[i].TotalAmount;
} else {
var newValue = map[j].value + myJSON[i].TotalAmount
map[j].value = newValue;
}
}
}
}
console.log(map)