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