稀缺数组

有一种数组叫稀缺数组,他的特点就是含有未赋值的索引。
比如:

let arr = [1]
arr.length = 10

这样一个数组长度为10,但是,除了第一位为1之外,其余的都是空,也就是使用了empty 字段占位。而map和filter作为最常用的数组方法之一,对于这种稀缺数组的处理是怎样的呢?

filter

任何问题首先看官方文档。

filter 为数组中的每个元素调用一次 callback 函数,并利用所有使得 callback 返回 true 或等价于 true 的值的元素创建一个新数组。callback 只会在已经赋值的索引上被调用,对于那些已经被删除或者从未被赋值的索引不会被调用。那些没有通过 callback 测试的元素会被跳过,不会被包含在新数组中。

官方文档清晰的表示了filter对于稀缺数组的处理。那就是不会对稀缺数组里面的空值进行回调函数的调用,并且最终结果会自动排除空值,这其实可以算一个很好的在数组里面排除空值的方法。

map

我们只要注意官方文档的这样一句话:根据规范中定义的算法,如果被map调用的数组是离散的,新数组将也是离散的保持相同的索引为空。有人可能对离散表示疑惑,我们可以简单理解为就是稀缺数组,数组里面存在‘孔’,也就是空值(不是空字符串)。

var array = [1,,,2]
var mapArray = array.map((item, index) => {console.log(index)  //0, 3return item + 1;
})
// 方法执行是打印 0,3 似乎跳过了数组中 hole 元素
console.log(mapArray) //[2, empty × 2, 3]

经测试发现map方法是将空值直接跳过不进行运算(这里跟filter一直),但是会在最终结果保留空值(这里跟filter又不一致)。

补充

当然除了filter和map之外,还有一些数组方法也会遇到这些情况,这里分享一篇看到的文章,文章里还介绍了findIndex,find ,forEach ,reduce 这些方法对于稀缺数组的处理。
文章链接

总结

会直接跳过稀缺数组元素的方法:filter,reduce,foreach
不会直接跳过稀缺数组元素的方法:find,findIndex
会直接跳过稀缺数组元素但是结果会保留稀缺元素的方法:map

map和filter方法对于稀缺数组的处理相关推荐

  1. Python之列表表达式及高阶函数lamda、zip、enumerate、map和filter方法

    一.列表表达式[List Comprehension] 顾名思义,这个表达式作用是以一个快捷的方法对列表进行操作或运算,返回新的列表.其使用方式为[表达式 for 变量 in 列表] 或者 [表达式 ...

  2. JS(ES5) 实现数组方法(迭代类型:evey、some、map、filter)的重构

    重构前要理解这些方法的要干嘛.能干嘛,还有明白传入每个参数有什么用. 数组调用evey.some.map.filter方法中,传入的第一个参数是回调函数(必填),第二个参数是一个对象(可填.可不填), ...

  3. js中数组filter过滤奇偶数_JS filter()方法:根据指定条件过滤数组元素

    JavaScript filter() 方法可以返回数组中满足指定条件的元素.具体用法如下: array.filter(callbackfn[, thisArg]); 参数说明: array:必需参数 ...

  4. 数组filter方法对数组元素进行过滤

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Arra ...

  5. JavaScript 数组filter方法完整介绍

    数组过滤器方法是 JavaScript 中使用最广泛的方法之一. 它允许我们快速过滤出具有特定条件的数组中的元素. 因此,在本文中,您将了解有关过滤器方法及其各种用例的所有内容. 所以让我们开始吧. ...

  6. JavaScript基础 - 24 (数组方法:every、some、forEach、map、filter、reduce)

    1.参数为回调函数,function(数组中的项目,序号,数组本身){ },至少接收一个项目(item.value)参数 ① every 数组中所有内容都满足回调函数的测试,返回值才为true,否则f ...

  7. js 数组遍历方法详解(map、filter、find、findIndex、reduce)

    目录 前言 map map是什么 map方法的结构及入参 语法糖 map一般不改变原数组 filter 说明 例子 find 和 findIndex 说明 例子 reduce 说明 例子 尾言 前言 ...

  8. 前端利用js里数组的filter方法进行多条件过滤查询

    需求:用户在输入框输入多个条件时,可以对表格数据进行过滤查询,无需后端接口处理,利用了前端js里数组的filter方法进行过滤. 如下是效果图: 当用户在姓名的输入框里输入"张"后 ...

  9. 如何拿到对象数组中的某一对象的元素(JS的filter方法)

    如何拿到对象数组中的某一对象的元素 在写一个简单的商品管理系统的时候,遇到了一个问题,我接口中需要传递的参数是一个role_id,但是我在页面上显示是角色名称 通过对filter()方法的使用,拿到对 ...

最新文章

  1. eclispe的三个重要配置文件
  2. 虚方法表与动态分派机制详解
  3. Memcache监控小工具stats命令
  4. java怎样将日期本土化_Java中的日期操作
  5. [Ubuntu] apt 的用法
  6. LinkedHashMap 底层分析
  7. UIScrollView与分页的联合使用
  8. 纯CSS实现二级下拉导航菜单
  9. 基于51单片机ADC0808的proteus仿真
  10. java 正则 d 1_java之正则表达式的使用1
  11. 在Linux系统下安装更换操作系统
  12. 【LeetCode】460 and 1132(LFU缓存机制)
  13. GitHub圣诞最火神器:“时光穿梭机”一键实现变老变年轻!
  14. 函数的参数(形参与实参)—理解
  15. Android6.0 Sensor架构和问题分析
  16. [股市]散户高手的炒股心得(收藏)
  17. ThinkPHP55.1验证码的使用及点击刷新
  18. LTspice XVII > Transformer 变压器仿真
  19. Vulnhub靶机:VEGETA_ 1
  20. 【8.21模拟赛T2.7221】[USACO21OPEN] Portals G【kruskal】

热门文章

  1. 《构建之法》第4.17章读书笔记
  2. ORA-01722 无效数字出错原因以及以及分析总结
  3. awk sed grep find sort常用配搭用法
  4. Android仿新浪微博弹出界面动画,Android仿新浪微博启动界面或登陆界面(1)
  5. 作者:Scott Hanselman首席工程师
  6. python 画出决策边界_python 画出使用分类器得到的决策边界
  7. Geany下载与安装
  8. 百度地图 pc浏览器获取经纬度
  9. python3 全局变量_Python3基础 当函数中的局部变量与全局变量同名了,各管各的...
  10. python借助jieba包对单独test和txt文档进行中文分词