日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

html5 json.stringify,JSON.stringify()妙用

發布時間:2023/12/10 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 html5 json.stringify,JSON.stringify()妙用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSON對象在所有現代瀏覽器中都可以使用,它有兩個非常有用的方法來處理JSON格式化的內容:解析和字符串化。JSON.parse() 取一個JSON字符串并將其轉換為JavaScript對象。JSON.stringify() 取一個JSON對象,并將其轉換為JSON字符串。

代碼使用const myObj = {

name: 'Skip',

age: 2,

favoriteFood: 'Steak'

};

const myObjStr = JSON.stringify(myObj);

console.log(myObjStr);

// "{"name":"Skip","age":2,"favoriteFood":"Steak"}"

console.log(JSON.parse(myObjStr));

// Object {name:"Skip",age:2,favoriteFood:"Steak"}

而且雖然這些方法通常用于對象,但也可以用于數組。

const myArr = ['bacon', 'letuce', 'tomatoes'];

const myArrStr = JSON.stringify(myArr);

console.log(myArrStr);

// "["bacon","letuce","tomatoes"]"

console.log(JSON.parse(myArrStr));

// ["bacon","letuce","tomatoes"]

妙用功能

1.用來調試對象

我們先來看看下面這個代碼在控制臺中輸出什么

//Initialize a User object

const user = {

"name" : "蔡生",

"age" : 26

}

console.log(user);RESULT

// [object Object]

看!console.log()沒有輸出我們想要的結果。它輸出了[object Object],因為從對象到字符串的默認轉換是“[objectObject]”。因此,我們使用JSON.stringify()先將對象轉換為字符串,然后把結果輸入console控制臺,如下所示。

const user = {

"name" : "蔡生",

"age" : 26

}

console.log(JSON.stringify(user));RESULT

// "{ "name" : "蔡生", "age" :26 }"

通常,開發人員使用這個stringify函數的方式很簡單,像上面那樣操作就可以。

2.存儲localStorage對象

一些時候,你想存儲用戶創建的一個對象,并且,即使在瀏覽器被關閉后仍能恢復該對象。下面的例子是?JSON.stringify?適用于這種情形的一個樣板:

3.數組去重

有人把這個用在數組對象去重上,下面我舉一個例子。

function unique(arr){

let unique = {};

arr.forEach(function(item){

unique[JSON.stringify(item)]=item;//鍵名不會重復

})

arr = Object.keys(unique).map(function(u){

//Object.keys()返回對象的所有鍵值組成的數組,map方法是一個遍歷方法,返回遍歷結果組成的數組.將unique對象的鍵名還原成對象數組

return JSON.parse(u);

})

return arr;

}

存在的問題:{x:1,y:2}與{y:2,x:1}通過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;

}

4.stringify 函數第二個參數的妙用

還是上面這道題,我們可以在第二個參數上解決對象屬性的順序問題,給它加上一個數組['name','author'],代碼改為下面這個就沒問題了。

function unique(arr) {

let unique = {};

arr.forEach(function(item) {

unique[JSON.stringify(item,['name','author'])] = item;

})

arr = Object.keys(unique).map(function(u) {

//Object.keys()返回對象的所有鍵值組成的數組,map方法是一個遍歷方法,返回遍歷結果組成的數組.將unique對象的鍵名還原成對象數組

return JSON.parse(u);

})

return arr;

}

正如你所知,第二個參數可以決定篩選出來的內容,當然它還有第三個參數,這里不展開了,有興趣看MDN。

5.實現深拷貝

實際開發中,如果怕影響原數據,我們常深拷貝出一份數據做任意操作,其實使用JSON.stringify()與JSON.parse()來實現深拷貝是很不錯的選擇。

//深拷貝

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]

6.判斷數組是否包含某對象,或者判斷對象是否相等。

//判斷數組是否包含某對象

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,a.sort()) === JSON.stringify(b,b.sort());//true

總結

以上是生活随笔為你收集整理的html5 json.stringify,JSON.stringify()妙用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。