JSON.stringify妙用

去重

function unique(arr) {
    let unique = {};
    arr.forEach(function(item) {
        //调整属性顺序
        var newData = {};
        Object.keys(item).sort().map(key = > {
            newData[key] = item[key]
        })
        unique[JSON.stringify(newData)] = item; //键名不会重复
    })
    arr = Object.keys(unique).map(function(u) {
        //Object.keys()返回对象的所有键值组成的数组,map方法是一个遍历方法,返回遍历结果组成的数组.将unique对象的键名还原成对象数组
        return JSON.parse(u);
    })
    return arr;
}

判断数组是否包含某对象,或者判断对象是否相等

//判断数组是否包含某对象
let data = [{
            name: 'echo'
        },
        {
            name: '前端开发博客'
        },
        {
            name: '蔡生'
        },
    ],
    val = {
        name: '蔡生'
    };
JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1; //true

//判断两数组/对象是否相等
let a = [1, 2, 3],
    b = [1, 2, 3];
JSON.stringify(a) === JSON.stringify(b); //true

实现深拷贝

//深拷贝
function deepClone(data) {
    let _data = JSON.stringify(data),
        dataClone = JSON.parse(_data);
    return dataClone;
};
//测试
let arr = [1, 2, 3],
    _arr = deepClone(arr);
arr[0] = 2;
console.log(arr, _arr) //[2,2,3]  [1,2,3]

存储 localStorage 对象

// 创建一个示例数据
var session = {
    'screens': [],
    'state': true
};
session.screens.push({
    "name": "screenA",
    "width": 450,
    "height": 250
});
session.screens.push({
    "name": "screenB",
    "width": 650,
    "height": 350
});
session.screens.push({
    "name": "screenC",
    "width": 750,
    "height": 120
});
session.screens.push({
    "name": "screenD",
    "width": 250,
    "height": 60
});
session.screens.push({
    "name": "screenE",
    "width": 390,
    "height": 120
});
session.screens.push({
    "name": "screenF",
    "width": 1240,
    "height": 650
});

// 使用 JSON.stringify 转换为 JSON 字符串
// 然后使用 localStorage 保存在 session 名称里
localStorage.setItem('session', JSON.stringify(session));

// 然后是如何转换通过 JSON.stringify 生成的字符串,该字符串以 JSON 格式保存在 localStorage 里
var restoredSession = JSON.parse(localStorage.getItem('session'));

// 现在 restoredSession 包含了保存在 localStorage 里的对象
console.log(restoredSession);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值