(译)JSON.STRINGIFY替换参数的功能

原文: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"}
复制代码

第三个参数能够是stringnumber。它决定要用做分隔符的文本或空格的数量。看下面: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

相关文章
相关标签/搜索