成员数组序列化带函数的JSON对象,让英雄做个完整的男人

本文通过一个英雄角色的实例,详细介绍了JavaScript中JSON.stringify和JSON.parse方法的使用技巧,特别是如何利用replacer参数来定制序列化过程,以及如何在反序列化过程中恢复函数类型的数据。

题记:写这篇博客要主是加深自己对成员数组的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

var oHero = {
	name: 'zjx',
	age: 27,
	getSkill: function(type){ if(type == 'strength') console.debug('开山劈石掌'); }
};
console.debug(JSON.stringify(oHero);
// 输出:{"name":"zjx","age":27}
时空送传器除了故障,豪杰出了时门空后之有所能技消逝,豪杰变狗熊,天下不再平和……

    你不能把义务归咎于送传门设计师,是实其作操员人不会用。

    JSON.stringify方法的真身是实其这样的:

JSON.stringify(value [, replacer] [, space])
送传的关键是第二个可选参数,replacer,官方的解释如下;

    可选项,一个数函或数组,用来换转结果。
如果replacer是数函,JSON.stringify会回调该数函,并传入key和value参数,这两个参数指向JSON中的每个成员。数函中的回返值用来代替原始值。如果回返undefined,那么该成员项被除排。根对象的key是一个空字符串。
如果replacer是数组,那么数组中的成员项就是JSON的key键,只有数组中现出的key才会被序列化。序列化的次序会按照数组中key的次序排列。如果JSON的中某项的值是数组时,该replacer会被疏忽。

    尼玛翻译的我蛋都碎了,还是看下案例吧。

    首先救拯我们的豪杰:

console.debug(JSON.stringify(oHero, function(key, value){
	if (typeof value === 'function') {
		return value + '';
	}
	return value;
}));
// 输出:{"name":"zjx","age":27,"getSkill":"function (type){ if(type == 'strength') console.debug('开山劈石掌'); }"}
豪杰再次走出时门空,深吸了一口不是很新颖的气空,感到身浑是力,然后对着一块石头使出开山辟石掌……“咔嚓”,手掌骨折……

    豪杰用另一只手推倒送传门旁的作操员妹子,含泪诘责“这是怎么回事??”

    每日一道理
书籍好比一架梯子,它能引领人们登上文化的殿堂;书籍如同一把钥匙,它将帮助我们开启心灵的智慧之窗;书籍犹如一条小船,它会载着我们驶向知识的海洋。

    其实你也别怪妹子,她少按了几个按钮而已。

    妹子回去问师太,师太教诲:

JSON.parse(text [, reviver])
reviver官方解释,请勿菊紧:

    可选项,一个用来换转结果的数函。该数函将迭代对象中的每个成员。如果一个成员项包括嵌套对象,会先换转被嵌套的对象。对于每个成员项,将生发如下事件:
如果reviver回返的是法合值,成员项的值会被替换为该值。
如果reviver回返的值等同于收接的值,成员项的值不会被修改。
如果reviver回返null或undefined,成员项会被删除。

    第三次,妹子对豪杰说:次这萌大奶!

var oNowHero = JSON.parse(strHero,function(key,value){
    if(value.indexOf && value.indexOf('function')>-1){
        return eval("(function(){return "+ value +" })()")
    }
    return value;
});
oNowHero.getSkill('strength');
// 输出:开山辟石掌
豪杰很满足的用双手推倒了妹子…………

    跋文:

    JSON.stringify中的replacer还可所以一个数组。

    豪杰是很劳碌的,他不仅要救拯我们地球,还要救拯艾泽拉斯大陆,救拯外域,救拯崔斯特姆……不同的天下要需不同的设备,如果把有所设备带在身上那太痛苦了,不仅自己担负大,而且输传中程过还有可能塞阻,结果就是袋脑出来了,屁股还在通道里,那么我们可以做选筛:

var oHero = {
	zjx: 'zjx',
	age: 27,
	earth: '机关枪',
	Azeroth: '阿什坎迪兄弟会之剑',
	NewTristram: '不朽之王的碎岩者'
};
var strHero = JSON.stringify(oHero, ['zjx','age','Azeroth']);
console.debug(strHero);
// 输出:{"zjx":"zjx","age":27,"Azeroth":"阿什坎迪兄弟会之剑"}
于是去艾泽拉斯的时候只带上AL便可。

    JSON.stringify第三个可选参数用于格式化输出,没啥意思,不解释。

文章结束给大家分享下程序员的一些笑话语录: 人工智能今天的发展水平:8乘8的国际象棋盘其实是一个体现思维与创意的强大媒介。象棋里蕴含了天文数字般的变化。卡斯帕罗夫指出,国际象棋的合法棋步共有1040。在棋局里每算度八步棋,里面蕴含的变化就已经超过银河系里的繁星总数。而地球上很少有任何数量达到这个级别。在金融危机之前,全世界的财富总和大约是1014人民币,而地球人口只有1010。棋盘上,所有可能的棋局总数达到10120,这超过了宇宙里所有原子的总数!经典语录网


内容概要:本文围绕虚拟电厂与电动汽车之间的互动关系,采用主从博弈理论构建了二者间的优化决策模型,并引入条件风险价值(CVaR)来衡量和管理电力系统中由可再生能源出力不确定性及电动汽车充放电行为来的风险。通过Matlab代码实现该模型,旨在优化虚拟电厂的调度策略,在保障系统经济性的同时提升其对不确定因素的鲁棒性。研究涵盖了模型构建、算法设计与仿真验证全过程,重点分析了不同风险偏好下虚拟电厂与电动汽车的博弈均衡结果及其对系统运行的影响,深入探讨了主从博弈框架下的决策机制与CVaR在电力金融风险量化中的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事能源互联网、电力市场、电动汽车调度、风险管理等相关领域研究的研究生或科研人员。; 使用场景及目标:①研究虚拟电厂如何协调管理大量分布式能源与电动汽车资源;②探讨主从博弈在电力市场中的建模方法与求解技巧;③利用CVaR工具量化并控制电力系统运行中的金融或运行风险;④通过Matlab实现复杂优化模型并进行仿真分析。; 阅读建议:此资源结合了博弈论、风险管理和电力系统优化等多学科知识,建议读者在学习过程中重点关注模型假设的合理性、CVaR的应用逻辑以及Matlab代码的实现细节,宜配合相关理论教材与案例进行深入理解和复现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值