原文: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