簡體   English   中英

JavaScript:動態添加新值以更新JSON /對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM