学习前端第三十一天(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));
相关推荐
dengqingrui1232 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
我的心永远是冰冰哒2 小时前
ad.concat()学习
学习
ZZZ_O^O3 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
slomay4 小时前
关于对比学习(简单整理
经验分享·深度学习·学习·机器学习
hengzhepa4 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
小小洋洋6 小时前
BLE MESH学习1-基于沁恒CH582学习
学习
Ace'7 小时前
每日一题&&学习笔记
笔记·学习
IM_DALLA7 小时前
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25
学习·fpga开发·verilog学习
丶Darling.8 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
Json_181790144808 小时前
商品详情接口使用方法和对接流程如下
大数据·json