学习前端第三十一天(JSON方法,toJSON;递归)

一、JSON方法

1.将对象转换为字符串

JavaScript 提供了如下方法:

  • JSON.stringify 将对象转换为 JSON,得到的json字符串是一个被称为 JSON 编码 或 字符串化(stringified) 的对象
  • JSON.parse 将 JSON 转换回对象。

字符串使用双引号。JSON 中没有单引号或反引号。

对象属性名称也是双引号的。这是强制性的。所以 age:20 被转换成 "age":20。

下面的会被json方法跳过:函数属性(方法)。Symbol 类型的键和值。存储 undefined 的属性。

javascript 复制代码
        const obj = { name: "jack", age: 20, gender: "male", [Symbol("id")]: "xc", }
        console.log(JSON.stringify(obj));//{"name":"jack","age":20,"gender":"male"}
        console.log(typeof JSON.stringify(obj));//string
        const arr = [1, 2, 3, 4, 5, undefined, function xc() { }, [Symbol("id")],]
        console.log(JSON.stringify(arr));//[1,2,3,4,5,null,null,[null]]

        console.log(JSON.stringify(true));//true
        console.log(JSON.stringify(false));//false

2.排除和转换,replacer

JSON``.``stringify``(value[``,replacer, space]``)

传递一个属性数组给它,那么只有这些属性会被编码。

3.格式化,space

JSON``.``stringify``(value[``, replacer, space ]``)

告诉 JavaScript 在多行中显示嵌套的对象,对象内部缩进 n个空格

4.解码 JSON 字符串,JSON.parse

let value = JSON``.``parse``(str, [reviver]``)``;

javascript 复制代码
// 字符串化数组
let numbers = "[0, 1, 2, 3]";

numbers = JSON.parse(numbers);

alert( numbers[1] ); // 1

str

要解析的 JSON 字符串。

reviver

可选的函数 function(key,value),该函数将为每个 (key, value) 对调用,并可以对值进行转换。

javascript 复制代码
        const obj =
            `
            [
              {
            "name": "jack",
            "age": 20,
            "gender": "male",
            "birth": "2002-02-16"
             } ,
             {
            "name": "jack",
            "age": 20,
            "gender": "male",
            "birth": "2002-02-16"
             } ,
             {
            "name": "jack",
            "age": 20,
            "gender": "male",
            "birth": "2002-02-16"
             }
            ]
             `;

        const r = JSON.parse(
            obj,
            function (k, v) {
                switch (true) {
                    case k === "age":
                        return v + "岁";
                    case k === "birth":
                        return (new Date(v)).toLocaleString();
                    default:
                        return v;
                }
            }
        );

        console.log(r);// [{...}, {...}, {...}]

二、递归

当一个函数解决一个任务时,在解决的过程中它可以调用很多其它函数。在部分情况下,函数会调用 自身 。这就是所谓的 递归

递归将函数调用简化为一个更简单的函数调用,然后再将其简化为一个更简单的函数,以此类推,直到结果变得显而易见。

javascript 复制代码
        //  递进加回归,50以内奇数相加
        function sum(n) {
            if (n === 0) return 0; // 有个确切的返回值
            return n + sum(n - 2) - 1;
        }
        console.log(sum(50));

递归遍历:

javascript 复制代码
        //  递归遍历
        const num = [1, 2, ["a", "b", 3, 4, [5, 6]], 7, 8, 9]
        function mapNum(arr) {
            arr.forEach(element => {
                if (Array.isArray(element) === false) {
                    console.log(element)
                } else {
                    mapNum(element);
                }
            }
            );
        };
        mapNum(num); //1 2 a b 3 4 5 6 7 8 9

递归通用写法:

javascript 复制代码
        // 递归通用写法;90%
        const nums = [1, 2, [10, 20, [3, 4], 5, 6], 7, 8];

        function sum(arr, n = 0) {    // 定义一个函数中的中间变量,且不会被重置
            arr.forEach(element => {
                if (Array.isArray(element) === false) {
                    n += element;     // 加上第一次的数字类型
                } else {
                    n += sum(element, n);   // 遇到数组类型,用前面的和加上数组类型中的和,注意中间变量
                }
            });
            return n;
        }
        console.log(sum(nums));
相关推荐
序属秋秋秋1 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna2 小时前
Docker学习
学习·docker·容器
promising-w8 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥8 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机8 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui
X Y O8 小时前
神经网络初步学习3——数据与损失
人工智能·神经网络·学习
霖0010 小时前
C++学习笔记三
运维·开发语言·c++·笔记·学习·fpga开发
面朝大海,春不暖,花不开10 小时前
结构化数据格式解析:JSON 与 XML 的技术应用与实践
xml·json
巴伦是只猫11 小时前
【机器学习笔记 Ⅲ】1 无监督学习
笔记·学习·机器学习