zoukankan      html  css  js  c++  java
  • chapter1.6、解构和对象的操作

    解构

    JS的解构较为灵活,参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax

    列表解构

    var parts = ["shoulder", "knees"];
    var lyrics = ["head", ...parts, 'and', 'toes'];
    console.log(lyrics)

    参数解构

    function f(x, y, z) {
        console.log(x + y + z)
        }
    var args = [2, 3 ,4];
    f(...args);

    数组解构

    const arr = [100,200,300];
    let [x,y,z] = arr;
    console.log(1,x,y,z); //1 100 200 300
    
    // 丢弃
    const [,b,] = arr;
    console.log(2,b); // 2 200
    // b = 5 // 异常,b声明为const
    
    // 少于数组元素
    const [d,e] = arr; // 3 100 200
    console.log(3,d,e);
    
    // 多于数组元素
    const [m,n,o,p] = arr // 4 100 2002 300 undefined
    console.log(4,m,n,o,p);
    
    // 可变变量
    const [f,...args] = arr
    console.log(5,f);  // 5 100   
    console.log(5,args); // 5 [200, 300]
    
    // 支持默认值
    const [j=1,k,,,l=10] = arr
    console.log(j,k,l); // 100 200 10

    解构的时候,变量从左到右和元素对齐,可变参数放到最右边。

    能对应到数据就返回数据,对应不到数据的返回默认值,如果没有默认值返回undefined。

    对象解构

    const obj = {
        a:100,
        b:200,
        c:300
    };
    
    let {x,y,z} = obj;
    console.log(x,y,z); // undefined undefined undefined
    
    let {a,b,c} = obj; // key名称
    console.log(a,b,c);
    
    let {a:m,b:n,l} = obj; //c已经声明,不能再次let
    console.log(m,n,l)
    
    let {a:M,c:N,d:D="python"} = obj; // 缺省值
    console.log(M,N,D)

    解构时,需要提供对象的属性名,会根据属性名找到对应的值。没有找到的返回缺省值,没有缺省值则返回undefined。

    复杂结构

    嵌套数组

    const arr = [1, [2, 3], 4];
    
    const [a, [b, c], d] = arr;
    console.log(a, b, c, d); //1 2 3 4
    
    const [e, f] = arr;
    console.log(e, f); //1 [ 2, 3 ]
    
    const [g, h, i, j = 18] = arr;
    console.log(g, h, i, j); //1 [ 2, 3 ] 4 18
    
    const [k, ...l] = arr;
    console.log(k, l); //1 [ [ 2, 3 ], 4 

    对象

    var metadata = {
        title: "Scratchpad",
        translations: [
            {
            locale: "de",
            localization_tags: [ ],
            last_edit: "2014-04-14T08:43:37",
            url: "/de/docs/Tools/Scratchpad",
            title: "JavaScript-Umgebung"
            }
        ],
        url: "/en-US/docs/Tools/Scratchpad"
    };
    //
    var { title: enTitle, translations: [{ title: localeTitle }] } = metadata;
    console.log(enTitle); // "Scratchpad"
    console.log(localeTitle); // "JavaScript-Umgebung"

    数组的操作

    方法 描述
    push(...items) 尾部增加多个元素
    pop() 移除最后一个元素,并返回它
    map 引入处理函数来处理数组中每一个元素,返回新的数组
    filter

    引入处理函数处理数组中每一个元素,此处理函数返回true的元素保留,否则该元素被过滤掉,保留的元素构成新的数组返回

    foreach

    迭代所用元素,无返回值

    const arr = [1, 2, 3, 4, 5];
    arr.push(6,7);
    console.log(arr);
    arr.pop()
    console.log(arr);
    // map
    const powerArr = arr.map(x => x*x); // 新数组
    console.log(powerArr);
    const newarr = arr.forEach(x => x+10); // 无返回值
    console.log(newarr, arr);
    narr = []
    newArr = arr.forEach(x => narr.push(x+10));
    console.log(newArr, narr);
    console.log(arr.filter(x => x%2==0)) // 新数组

    数组练习

    有一个数组 const arr = [1, 2, 3, 4, 5]; ,要求算出所有元素平方值是偶数且大于10的平方值

    var arr = [1,2,3,4,5]
    const c = Math.sqrt(10)
    console.log(arr.filter(x => x > c && !(x % 2)).map(x => x*x))

    过滤数据尽可能先过滤,后计算,海量数据处理更要先过滤。 涉及数据清洗。

    对象的操作

    Object的静态方法  描述
    Object.keys(obj)  ES5开始支持。返回所有key
    Object.values(obj)  返回所有值,试验阶段,支持较差
    Object.entries(obj)  返回所有值,试验阶段,支持较差
    Object.assign(target, ...sources) 使用多个source对象,来填充target对象,返回target对象,返回的对象就是target对象,是同一个对象

     例:

    const obj = {
        a:100,
        b:200,
        c:300
    };
    console.log(Object.keys(obj)); // key,ES5
    console.log(Object.values(obj)); // 值,实验性
    console.log(Object.entries(obj)); // 键值对,实验性
    // assign
    var metadata = {
        title: "Scratchpad",
        translations: [
        {
            locale: "de",
            localization_tags: [ ],
            last_edit: "2014-04-14T08:43:37",
            url: "/de/docs/Tools/Scratchpad",
            title: "JavaScript-Umgebung"
        }
        ],
        url: "/en-US/docs/Tools/Scratchpad"
    };
    var copy = Object.assign({}/*目标对象*/, metadata,
        {schoolName:'Riper',url:'www.Riper.com'}/*增加新的属性,覆盖同名属性*/,
        {translations:null} /*覆盖metadata的translations*/
    );
    console.log(copy);
  • 相关阅读:
    Log4Net使用指南
    构建Asp.Net2.0 GridView复合多层表头的几种方法
    javaScript中如何定义类
    是不是silverlight 2 的bug
    领悟 JavaScript 中的面向对象
    web拖动Drag&Drop原理
    一个不错的js验证框架
    MySQL中文参考手册
    高效实现数据仓库的七个步骤
    什么是ARP?如何防范ARP欺骗?
  • 原文地址:https://www.cnblogs.com/rprp789/p/9975642.html
Copyright © 2011-2022 走看看