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

回顾下语法:

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

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

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

Array.prototype.filter(Boolean)

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

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

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

最新文章

  1. CSharpGL(7)对VAO和VBO的封装
  2. 关于Oracle的疑问
  3. spring 拦截器
  4. 有时候就是看不进论文-jQuery动画特效篇&MySQL
  5. Android学习笔记(五)——活动的生命周期
  6. C语言之const和define
  7. find_in_set mysql
  8. 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求【转载】
  9. C++ 构造过程和析构过程
  10. N次剩余
  11. base64编码的图片字节流存入html页面中的显示
  12. openfire:openfire单独编译指定插件的方法
  13. Linux查看CPU和内存的配置信息
  14. JavaScript事件代理和委托
  15. Linux挂载qcow2格式的镜像
  16. linux免密码登录
  17. Select显示多级分类列表
  18. 自己写的jQuery 左右选择框,大家多多指教!
  19. oracle中的序列,可以解决自增各种编号自动增长问题,说一下我的小问题。
  20. 监听input内容改变的oninput与onpropertychange在ie9的bug

热门文章

  1. Android 网络下载图片
  2. Windows 8.1下安装Mac OS X 10.8虚拟机
  3. 服务器端cs文件
  4. Excel关闭事件
  5. hdu 5384 Danganronpa(字典树)
  6. Odoo 8.0 new API 概述
  7. Android基础总结(七)BroadcastReceiver
  8. java守护线程。
  9. Excel 经常使用的公式总结
  10. C++引用具体解释