![](/img/trans.png)
[英]Can't add new name and value to JSON object dynamically with condition using JavaScript
[英]JavaScript: Dynamically add new value to update JSON/ object
我已經動態創建了對象(預定義),並將所有年份(2年,2015年和2014年)的所有月份(實際上只顯示了3個月的12個月)的值都設置為0。 因此,我的數據網格將以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}
];
我認為地圖功能在這種情況下將是理想的。 請參見下面的代碼段:
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);
遍歷數組,找到相關的月份,並更新其值:
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 }
};
如果需要按排序順序使用它們,則可以同時具有兩種結構:日期到對象的映射和數組,用於存儲對相同對象的引用。
您可以只使用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);
只需從陣列中選擇要更新的單元格即可。
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;
}
當然,您可以根據需要使其更具動態性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.