原文:TIL — THE POWER OF JSON.STRINGIFY REPLACER PARAMETERjavascript
我有一個有趣的問題讓我有些困惑。下面讓我分享我所學到的知識,也許當您遇到相似挑戰時能夠節省您一些時間。讓咱們一塊兒享受JSON.stringify的樂趣吧~java
const dude = {
name: "Pawel",
friends: ["Dan", "Pedro", "Mr Gregory"]
};
const dudeStringified = JSON.stringify(dude);
console.log(dudeStringified);
// {"name":"Pawel","friends":["Dan","Pedro","Mr Gregory"]}
複製代碼
沒有驚喜。不幸的是,個人項目(AWS DynamoDB 好奇野獸)中使用的架構迫使我不得不處理ES6zhong的Set。所以事情變得更有趣。看看這個:json
const dude = {
name: "Pawel",
friends: new Set(["Dan", "Pedro", "Mr Gregory"])
};
const dudeStringified = JSON.stringify(dude);
console.log(dudeStringified);
// {"name":"Pawel","friends":{}}
複製代碼
我覺得Set值將被轉換爲一個普通數組。您可能已經猜到我錯了, Sets,WeakSets,Maps和WeakMaps被忽略或替換爲null
。不過仍是有但願的——JSON.stringify可選的第二個參數容許咱們處理全部Sets並將它們轉換爲數組。數組
const dude = {
name: "Pawel",
friends: new Set(["Dan", "Pedro", "Mr Gregory"])
};
const dudeStringified = JSON.stringify(dude, (key, value) =>
value instanceof Set ? [...value] : value
);
console.log(dudeStringified);
// {"name":"Pawel","friends":["Dan","Pedro","Mr Gregory"]}
複製代碼
問題解決了👏架構
(TIL)Today I Learned函數
JSON.stringify()接受第二個可選參數,該參數能夠是遞歸替換器函數或者是白名單鍵的數組。像這樣:ui
// Second argument as a replacer function
const dude = {
name: "Dan"
};
const dudeStringified = JSON.stringify(dude, (key, value) =>
key === "name" ? "Pawel" : value
);
console.log(dudeStringified);
// {"name":"Pawel"}
// Second argument as an array of white-listed keywords
const dude = {
name: "Pawel",
friends: new Set(["Dan", "Pedro", "Mr Gregory"])
};
const dudeStringified = JSON.stringify(dude, ["name"]);
console.log(dudeStringified);
// {"name":"Pawel"}
複製代碼
第三個參數能夠是string
或number
。它決定要用做分隔符的文本或空格的數量。看下面:spa
// Third argument as a number
const dude = {
name: "Pawel",
friends: ["Dan", "Pedro", "Mr Gregory"]
};
const dudeStringified = JSON.stringify(dude, null, 4);
console.log(dudeStringified);
// {
// "name": "Pawel",
// "friends": [
// "Dan",
// "Pedro",
// "Mr Gregory"
// ]
// }
// Third argument as a string
const dude = {
name: "Pawel",
friends: ["Dan", "Pedro", "Mr Gregory"]
};
const dudeStringified = JSON.stringify(dude, null, "🍆");
console.log(dudeStringified);
// {
// 🍆"name": "Pawel",
// 🍆"friends": [
// 🍆🍆"Dan",
// 🍆🍆"Pedro",
// 🍆🍆"Mr Gregory"
// 🍆]
// }
複製代碼
直到下次,請保持好奇💋code