我已经为所有年份(2年,2015年和2014年)动态创建了对象(预定义)并将值设置为0表示所有月份(实际上是12个月,我只显示了3个月)。所以我的数据网格将看起来所有月份的0值。见下面的代码
var arrayObj = [
{"year" : 2015, "month" : "JAN", "value" : 0},
{"year" : 2015, "month" : "FEB", "value" : 0},
{"year" : 2015, "month" : "MAR", "value" : 0},
{"year" : 2014, "month" : "JAN", "value" : 0},
{"year" : 2014, "month" : "FEB", "value" : 0},
{"year" : 2014, "month" : "MAR", "value" : 0}
];
我会定期在表单提交后以对象格式继续获得单个月的价值。
eq. {"year" : 2015, "month" : "FEB", "value" : 2.33}
所以我的原始对象也应该相应地改变,使用javascript代码。像下面..
var arrayObj = [
{"year" : 2015, "month" : "JAN", "value" : 0},
{"year" : 2015, "month" : "FEB", "value" : 2.33},
{"year" : 2015, "month" : "MAR", "value" : 0},
{"year" : 2014, "month" : "JAN", "value" : 0},
{"year" : 2014, "month" : "FEB", "value" : 0},
{"year" : 2014, "month" : "MAR", "value" : 0}
];
答案 0 :(得分:2)
我认为地图功能在这种情况下是理想的。请参阅以下代码段:
var src = [
{"year" : 2015, "month" : "JAN", "value" : 0},
{"year" : 2015, "month" : "FEB", "value" : 0},
{"year" : 2015, "month" : "MAR", "value" : 0},
{"year" : 2014, "month" : "JAN", "value" : 0},
{"year" : 2014, "month" : "FEB", "value" : 0},
{"year" : 2014, "month" : "MAR", "value" : 0}
];
var newRecord = {
"year": 2015,
"month": "FEB",
"value": 2.33
};
function updateJSON(src, newRecord) {
return src.map(function(item) {
return (item.year === newRecord.year && item.month === newRecord.month) ? newRecord : item;
});
}
src = updateJSON(src, newRecord);
console.log(src);
答案 1 :(得分:1)
遍历数组,找到相关月份,并更新其值:
var newData = { "year" : 2015, "month" : "FEB", "value" : 2.33 };
for (var i = 0; i < data.length; i++) {
var entry = data[i];
if (entry.year == newData.year && entry.month == newData.month)
entry.value = newData.value;
}
但是,您的结构不适合此类更新。如果您有10,000个条目,则可能需要检查所有条目以更新单个条目。
您应该按年和月组织数据。例如:
var data = {
'2015-FEB': 2.5
'2015-MAR': 3.8
};
更新此其他结构只需一个操作:
data[year + '-' + month] = value;
如果您需要在发布的表单中使用对象,那么您可以充分利用这两个方面:
var data = {
'2015-FEB': { "year" : 2015, "month" : "FEB", "value" : 2.33 }
};
如果按排序顺序需要它们,则可以使用两个结构:数据的日期到对象映射和,存储对相同对象的引用。< / p>
答案 2 :(得分:1)
您可以使用filter
找到该对象。
var arrayObj = [{
"year": 2015,
"month": "JAN",
"value": 0
}, {
"year": 2015,
"month": "FEB",
"value": 0
}, {
"year": 2015,
"month": "MAR",
"value": 0
}, {
"year": 2014,
"month": "JAN",
"value": 0
}, {
"year": 2014,
"month": "FEB",
"value": 0
}, {
"year": 2014,
"month": "MAR",
"value": 0
}];
var newData = {
"year": 2015,
"month": "FEB",
"value": 2.33
};
function findOneByMonthAndYear(arr, month, year) {
return arr.filter(function(item) {
return item.year === year && item.month === month;
})[0];
}
var item = findOneByMonthAndYear(arrayObj, newData.month, newData.year);
item.value = newData.value;
console.log(arrayObj);
答案 3 :(得分:1)
只需从要更新的阵列中选择单元格即可。
var n= { "year" : 2015, "month" : "FEB", "value" : 2.33 };
var arrayObj = [
{"year" : 2015, "month" : "JAN", "value" : 0},
{"year" : 2015, "month" : "FEB", "value" : 0},
{"year" : 2015, "month" : "MAR", "value" : 0},
{"year" : 2014, "month" : "JAN", "value" : 0},
{"year" : 2014, "month" : "FEB", "value" : 0},
{"year" : 2014, "month" : "MAR", "value" : 0}
];
for (var z = 0; z < arrayObj.length; z++) {
if(arrayObj[z].year="2015" && arrayObj[z].month="FEB")
arrayObj[z].value=n.value;
}
当然,你可以根据自己的需要使其更具活力。