我們知道可用方括號來表示數組或者JSON對象的屬性值,其實在特定場合,方括號還有妙用的。
比如我有數據源是一組JSON,其中有一個屬性是時間字符串,我想對時間的小時、星期、日、月分別進行處理。每條JSON都各自生成一條新的JSON,傳入參數field="hour"時,取小時,存入"hour"字段;傳入參數是field="day"時,取星期,存入"day"字段,傳入參數field="date"時,取日期,存入"data"字段,傳入參數是field"month"時,取月份,存入"month"字段。下面是例程,用到了方括號的兩種方法,還真不好用其他方式替代:
function showchart(dataset,field,getarg,offset) {
...
let trans=dataset.map(item=>({[field]:(new Date(item.rectime))[getarg]()-offset}))
...
}
...
showchart(ds,"hour", "getHours",0)
showchart(ds,"day", "getDay",0)
showchart(ds,"date", "getDate",1)
showchart(ds,"month", "getMonth", 0)
函數里offset是一個偏移量,這里說一下JavaScript里時間相關的函數有些地方與常理有些出入,getHours()取出來的小時沒有異議,getDay()星期日是0,星期一到星期六分別對應1-6,也沒有毛病,getDate()出來的結果就是日期,1-31沒有毛病吧,但是如果你用它的值當作數組下標的話,就沒有0,還得自己再折騰轉換下,我就干脆-1,從0開始,getMonth(),這個跟getDate()又不是一個邏輯了,這個一月是0,十二月是11,理解起來要加1,不過值用作數組下標的話,剛剛好。
代碼里[field]你如果去掉方括號的話,就是field作為key了,而不是field的值作為key,obj[getarg](),這種表示obj對象的一個調用方法,方法名是傳入參數getarg這個字符串的值。