代码之家  ›  专栏  ›  技术社区  ›  bbsimonbb

我可以创建一个函数来替换调用它的对象吗?

  •  -1
  • bbsimonbb  · 技术社区  · 8 年前

    当一些新的JSON出现时,我喜欢将所有字符串日期转换为日期对象。如果我能创建一个函数,用解析的日期对象替换调用它的字符串,我会更喜欢它。这可能吗?

    String.prototype.hydrateAsDate = ()=>{
        this = new Date(this);
        // what I want to do, but how do I do it ?!
    }
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   ponury-kostek    8 年前

    您可以使用恢复自 JSON.parse ,它将返回 Date 结果中的对象而不是字符串

    function revive(key, value) {
    	var a;
    	if (typeof value === "string") {
    		a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
    		if (a) {
    			return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]));
    		}
    	}
    	return value;
    }
    
    console.log(JSON.parse("\"2018-05-15T13:40:30.052Z\"", revive) instanceof Date);

    此示例摘自 https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js

        2
  •  1
  •   Jonas Wilms    8 年前

    您可以只使用一个实用程序,而不是更改原型:

     function parseDates(obj, ...keys) {
       const result = {...obj};
       for(const key of keys)
          result[key] = new Date(obj[key]);
       return result;
     }
    

    可用作:

    parseDates({ createdAt: 123456789 }, "createdAt");
    

    或替换一个:

    obj = parseDates(obj, "createdAt");