码迷,mamicode.com
首页 > Web开发 > 详细

JSON.stringify()还可以这么用

时间:2018-12-23 23:53:06      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:nbsp   分享图片   深拷贝   转换   mod   遇到   技术   ima   ===   

最近做项目的时候遇到一个对象深拷贝的问题,网上看了下发现最为简便的方法是JSON.stringify(),比如你要深拷贝一个对象,可以这么做:

var test={
    a:"hello",
    b:"world",
    c:[
        {dd:"css",ee:"cdd"},
        {mm:"ff",nn:"ee"}
    ]
};
var testCopy = JSON.parse(JSON.stringify(test))

这时你对testCopy变量的修改是不会影响到原来的test变量。

然后比较好奇的又去MDN查了下文档,发现JSON.stringify()还可以传可选的参数:

技术分享图片

这里重点关注第二个参数,可以传一个函数或者数组。如上面文档所说,如果该参数是函数的话被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;嗯,感觉挺有用处的:

看例子,传函数:

比如,你只是想取该对象属性值为不为字符串的,就可以:

function replacer(key, value) {
  if (typeof value === "string") {
    return undefined;
  }
  return value;
}

var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7};
var jsonString = JSON.stringify(foo, replacer);

结果为:{"week":45,"month":7}.

传数组:

JSON.stringify(foo, [‘week‘, ‘month‘]);  
// ‘{"week":45,"month":7}‘, 只保留“week”和“month”属性值。

这么一来,我们可以很方便的对一个复杂对象数据进行简单的过滤筛选,甚至可以省略遍历属性的循环取值。

 

JSON.stringify()还可以这么用

标签:nbsp   分享图片   深拷贝   转换   mod   遇到   技术   ima   ===   

原文地址:https://www.cnblogs.com/pjl43/p/10165943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!