接上一篇,JavaScript数组方法--concat、push,继续其他的数组方法。

  • every:every() 方法测试数组的所有元素是否都通过了指定函数的测试。

  先看其使用方法:

function isBelowThreshold(currentValue) {
return currentValue < 40;
} var array1 = [1, 30, 39, 29, 10, 13]; console.log(array1.every(isBelowThreshold));

  多说一句,看到这个示例的时候,是不是想起来我们前面的当map遇到parseInt。可以结合着理解一下。

  看其语法:  

arr.every(callback[, thisArg])

  一个必填参数callback(回调函数,下同),一个选填参数thisArg--执行 callback 时使用的 this 值。到目前为止,我从未使用过该参数。

  而callback()被调用时传入三个参数:元素值,元素的索引,原数组。关键在于,索引和原数组非必填。
  所以这里可以稍微简单理解一下,也就是说,every的参数是一个callback,callback所传递的参数是当前数组元素(没有传递索引和原数组),对该元素进行验证,如果全都为真,则结果返回true,一旦有一个验证没通过,则返回false。
  那么,来吧,重构一下:依然与concat、push一样,重构函数的第一个参数为需要操作的数组。

function every(arr, fn, thisArg) {
if (!(arr instanceof Array)) throw new Error("请确保第一个参数类型为数组")
for (var i = 0; i < arr.length; i++) {
if (!fn.call(thisArg, arr[i])) return false
}
return true
}

  也就是说一旦有callback返回false,就立即结束函数运行,直接返回false。

  • some:some() 方法测试是否至少有一个元素通过由提供的函数实现的测试。
    与every方法非常类似,唯一有所区别的是,every要求所有元素通过callback验证,才返回true,否则返回false;而some是一旦有一个元素通过验证,就返回true,如果全都没有通过验证,则返回false。
    是不是很容易理解?把every函数稍作修改就成为some函数了。

    function some(arr, fn, thisArg) {
    if (!(arr instanceof Array)) throw new Error("请确保第一个参数类型为数组")
    for (var i = 0; i < arr.length; i++) {
    if (fn.call(thisArg, arr[i])) return true
    }
    return false
    }
  • fill: fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。返回修改后的元素。
    老规矩,先看用法:

    var array1 = [1, 2, 3, 4];
    console.log(array1.fill(0, 2, 4));
    console.log(array1.fill(5, 1));
    console.log(array1.fill(6));

      结果呢?

    看出什么了吗?结合一下fill的语法。

    arr.fill(value[, start[, end]])
    

      有三个参数:第一个value,就是上述示例中的0、5、6,第二个参数start,在上述示例中,分别为2,1,0,不填的话,默认为0;第三个参数end,在上述示例中为4,4,4,默认为数组的length值,所以填充的值是不包含end这个索引位置的,如果end值过大,大于数组的length了,那么会直接修正为数组length值。
       据此,应该很容易理解上述三个示例了。
           用中文描述一下:
           第一个是,用数字0填充array1当中索引为2、3的元素位置。
      第二个是,用数字1填充array1当中从索引为1到数组结尾的元素。
      第三个是,用数组6填充array1当中所有索引位置。
    需要注意的一点是,start和end均允许为负值,如果为负值表示倒数,从代码层面解释就是相当于start+arr.length
    好了。可以重构了。

    function fill (arr, value, start, end){
    if (!(arr instanceof Array)) throw new Error("请确保第一个参数类型为数组")
    start = start || 0
    start = start < 0 ? start + arr.length : start
    end = end ? (end < 0 ? arr.length + end : end) : arr.length
    end = Math.min(end, arr.length)
    for (var i = start; i < end; i++) {
    arr[i] = value
    }
    return arr
    }

JavaScript数组方法--every、some、fill的更多相关文章

  1. JavaScript数组方法详解

    JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...

  2. 一站式超全JavaScript数组方法大全

    一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...

  3. 【译】你应该了解的JavaScript数组方法

    让我们来做一个大胆的声明:for循环通常是无用的,而且还导致代码难以理解.当涉及迭代数组.查找元素.或对其排序或者你想到的任何东西,都可能有一个你可以使用的数组方法. 然而,尽管这些方法很有用,但是其 ...

  4. JavaScript数组方法大全(推荐)

    原网址:http://www.jb51.net/article/87930.htm 数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习, ...

  5. JavaScript 数组方法处理字符串 prototype

    js中数组有许多方法,如join.map,reverse.字符串没有这些方法,可以“借用”数组的方法来处理字符串. <!doctype html> <html lang=" ...

  6. 2018.2.27 JavaScript数组方法应用

    JavaScript数组方法应用 1.找出元素item在给定数组arr中的位置 function indexOf(arr,item){ return arr.indexOf(item); } func ...

  7. JavaScript数组方法速查,32个数组的常用方法和属性

    JavaScript数组方法速查手册极简版 http://30ke.cn/doc/js-array-method JavaScript数组方法速查手册极简版中共收了32个数组的常用方法和属性,并根据方 ...

  8. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

  9. 25个JavaScript数组方法代码示例

    摘要: 通过代码掌握数组方法. 原文:通过实现25个数组方法来理解及高效使用数组方法(长文,建议收藏) 译者:前端小智 Fundebug经授权转载,版权归原作者所有. 要在给定数组上使用方法,只需要通 ...

随机推荐

  1. Sublime Text 3 package control 解决 "There are no packages available for installation" 错误

    造成这个错误的原因估计是因为由于packagecontrol.io无法访问,所以导致无法读取“https://packagecontrol.io/channel_v3.json”文件的原因. 解决方法 ...

  2. 练习题:试使用C#编程实现银行、ATM等功能

    练习题:试使用编程实现银行.ATM等功能 using System; using System.Collections.Generic; using System.Linq; using System ...

  3. oracle数据库连接缓慢

    今天连接数据库时非常的慢,大概将近1分钟,才能连上,感觉不对,登录数据库所在的服务器,进行检查,常规的内存.硬盘.CPU全都正常,然后想要进入oracle用户时报错了:su: cannot set u ...

  4. java学习之路重新出发

    一.Java发展史: 1995年由詹姆斯高斯林带领团队开发 java问世 2004  jdk1.5版本更名jdk5.0 2010  sun公司被oracle公司收购  二.java三大体系: java ...

  5. nginx日志分割

    mark 参考文章: https://blog.csdn.net/molaifeng/article/details/82667158

  6. JVM垃圾回收机制之对象回收算法

    前言 在前面的文章中,介绍了JVM内存模型分为:堆区.虚拟机栈.方法区.本地方法区和程序计数器,其中堆区是JVM中最大的一块内存区域,在Java中的所有对象实例都保存在此区域,它能被所有线程共享. 在 ...

  7. 软件开发者路线图梗概&书摘chapter2

    空杯心态:放下对技能水平的自鸣得意 1.入门语言:学习一门语言,从实际问题入手→形成反馈回路 构建学习沙箱 利用实际代码,进行学习测试 学习一门语言:与精通该语言的专家一起工作,即找人指导 阅读他人的 ...

  8. javascript 创建节点和新增节点

    createElement(tabName) 创建一个为tagName的新元素节点 ANode.appendChild(BNode)把B节点追加至A节点的末尾 insertBefore(ANode,B ...

  9. mnist的格式说明,以及在python3.x和python 2.x读取mnist数据集的不同

    有一个关于mnist的一个事例可以参考,我觉得写的很好:http://www.cnblogs.com/x1957/archive/2012/06/02/2531503.html #!/usr/bin/ ...

  10. 《DenseNet Models for Tiny ImageNet Classification》课程设计论文

    paper : <DenseNet Models for Tiny ImageNet Classification>     https://arxiv.org/ftp/arxiv/pap ...