或许为了自身写,或许为了知己写!

JSON.stringify() 妙用

调试对象

比如,如下代码:

1
2
3
4
5
6
7
8

var user = {
name: 'hello word',
age: 18
}


console.log(user)

打印输出 [object Object],因为从对象到字符串的默认转换是 [object Object]。因此,使用 JSON.stringify 先将对象转化字符串,然后把结果输出控制台。如下:

1
2
3
4
5
6
7
8
9
var user = {
name: 'hello word',
age: 18
}


console.log(JSON.stringify(user))

// {name:"hello word", age:18}

存储 localStorage 对象

有时想存储创建的对象,并且在浏览器被关闭后让能恢复该对象。如下所示:

1
2
3
4
5
6
7
8
9
10

var course = {
name: '三年级语文',
price: 18
}


localStorage.setItem('course', JSON.stringify(course));

var getLocalCourse = JSON.parse(localStorage.getItem('course'));

数组去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

function unique(arr) {
var obj = {};
arr.forEach(function(item) {
var newData = {};
Object.keys(item).sort().map(function(key) {
newData[key] = item[key];
})
obj[JSON.stringify(newData)] = item; // 键名不会重复
})

arr = Object.keys(obj).map(function(val) {
return JSON.parse(val);
})
return arr;
}

JSON.stringify 第二个参数可以决定筛选出来的内容,还有第三个参数,可以参考 MDN

实现深拷贝

1
2
3
4
5
6

function deepClone(data) {
var _data = JSON.stringify(data);
var newData = JSON.parse(_data);
return newData;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 判断数组是否包含某对象 */ 

var data1 = [
{ name: 'cherry' },
{ name: 'sunny' }
];

var data2 = { name: 'sunny' };

console.log(JSON.stringify(data1).indexOf(JSON.stringify(data2)) != -1)
// true

/* 判断数组或对象是否相等 */


var a = [1, 2, 3];
var b = [1, 2, 3];

console.log(JSON.stringify(a) == JSON.stringify(b))
// true
———— / END / ————
0%