zoukankan      html  css  js  c++  java
  • Array.prototype.filter(Boolean)

    ES5 中的数组有这个方法:Array.prototype.filter ,具体使用参考MDN,这里讲一个特殊应用:

    回顾下语法:

    new_array = arr.filter(callback[, thisArg]);

    callback
    用来测试数组的每个元素的函数。调用时使用参数 (element, index, array)。
    返回true表示保留该元素(通过测试),false则不保留。

    逻辑上很简单, callback 返回 true 就保留,否则不保留,但是有的时候还可以这么用,如图:

    Array.prototype.filter(Boolean)

    image

    仔细想想逻辑上没有问题,应该等价于

    image

    然后,发现一个新的应用,把下面这个转成数组:

    const    medicineEntities = { 1: { name: '' }, 2: { name: '' }, 3: { name: '' }, ids: [1, 2], invalidIds: [3] ;

    有一种解法:

    medicines = Object.assign([], medicineEntities).filter(Boolean);

    仔细理解没问题!

    下面分析:

    Object.assign 把 medicineEntities 的属性赋值给了 [],这样的结果就是,

    因为数组本身也是对象,所以

    1、属性名为数字的属性赋值成功,计入 length

    2、属性名不为数字的赋值成功,不计入 length

    3、因为没有 0 属性,所以 0 属性为 undefined

    最终,数字属性成为数组的下标,值为数组的值,第一项为 undefined ,所以被 filter(Boolean) 过滤掉了,后面的非数值型属性变成了数组的属性,不过不计入下标和 length

  • 相关阅读:
    #Hadoop集群部署
    #Linux Keepalived 负载均衡
    #Linux LVS 负载均衡
    #Kafka 彻底删除topic
    #Linux Keepalived 双机热备
    Python #图片验证码
    Linux #tar
    MongoDB #$set的问题
    Django #CSRF
    keystone环境搭建(源码方式+yum方式)(ocata版本)
  • 原文地址:https://www.cnblogs.com/xianshenglu/p/8297523.html
Copyright © 2011-2022 走看看