首页 > 其他分享 >js数组-实例方法:Array.prototype.entries,Array.prototype.every,Array.prototype.fill

js数组-实例方法:Array.prototype.entries,Array.prototype.every,Array.prototype.fill

时间:2024-12-22 17:53:23浏览次数:11  
标签:end len js start 数组 Array prototype

Array.prototype.entries()

  • entries() 方法返回一个新的数组迭代器对象,该对象包含数组中每个索引的键/值对
  • 语法
    • entries()
  • 返回值
    • 一个新的可迭代迭代器对象
  • Array.prototype.myEntries()
Array.prototype.myEntries = function () {
  const newThis = []
  for (let i = 0; i < this.length; i++) {
    newThis[i] = [i, this[i]]
  }
  return Iterator.from(newThis)
}

Array.prototype.every()

  • every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值
  • 语法
    • every(callbackFn)
    • every(callbackFn, thisArg)
  • 参数
    • callback:为数组中的每个元素执行的函数。它应该返回一个真值以指示元素通过测试,否则返回一个假值。该函数被调用时将传入以下参数:
      • element:数组中当前正在处理的元素
      • index:正在处理的元素在数组中的索引
      • array:调用了 every() 的数组本身
      • thisArg:执行 callbackFn 时用作 this 的值
  • 返回值
    • 如果 callbackFn 为每个数组元素返回真值,则为 true。否则为 false
  • Array.prototype.myEvery()
Array.prototype.myEvery = function (callback, thisArg) {
  if (typeof callback !== 'function') {
    throw new TypeError(`${typeof callback} is not function`)
  } else {
    // 使用len的长度做for循环
    const len = this.length
    for (let i = 0; i < len; i++) {
      // 判断当前位置是否是空槽,是的话不做处理,不是的话调用callback函数
      if (!this.hasOwnProperty(i)) {
        continue
      } else {
        const value = callback.call(thisArg, this[i], i, this)
        // 如果函数值为false,则return false,终止循环
        if (!value) return false
      }
    }
    return true
  }
}

Array.prototype.fill()

  • fill() 方法用一个固定值填充一个数组中从起始索引(默认为 0)到终止索引(默认为 array.length)内的全部元素。它返回修改后的数组
  • 语法
    • fill(value)
    • fill(value, start)
    • fill(value, start, end)
  • 参数
    • value:用来填充数组元素的值。注意所有数组中的元素都将是这个确定的值:如果 value 是个对象,那么数组的每一项都会引用这个元素
    • start:基于零的索引,从此开始填充,转换为整数。
      • 负数索引从数组的末端开始计算,如果 start < 0,则使用 start + array.length
      • 如果 start < -array.length 或 start 被省略,则使用 0
      • 如果 start >= array.length,没有索引被填充
    • end:基于零的索引,在此结束填充,转换为整数。fill() 填充到但不包含 end 索引
      • 负数索引从数组的末端开始计算,如果 end < 0,则使用 end + array.length
      • 如果 end < -array.length,则使用 0
      • 如果 end >= array.length 或 end 被省略,则使用 array.length,导致所有索引都被填充
      • 如果经标准化后,end 的位置在 start 之前或之上,没有索引被填充
  • 返回值
    • 经 value 填充修改后的数组
  • Array.prototype.myFill()
Array.prototype.myFill = function (value, start, end) {
  const len = this.length
  function getStartOrEnd(val, len) {
    let newVal
    switch (true) {
      case val < 0 && val >= -len:
        newVal = len + val
        break
      case val < -len:
        newVal = 0
        break
      case val >= len || Number.isNaN(val):
        newVal = len
        break
      case val >= 0 && val < len:
        newVal = val
        break
      default:
    }
    return newVal
  }
  // 稀疏数组会被填充 可以直接使用for循环 不能用for of或者for in
  let newStart = getStartOrEnd(start, len) || 0
  let newEnd = getStartOrEnd(end, len) || len
  for (let i = 0; i < len; i++) {
    /**
     * end的位置在start之前或者之上,没有索引被填充
     * value不写即为传入默认的undefined
     * 从start开始,填充到end,但是不包含end,即如果start等于end,也不进行填充
     */
    if (newEnd > newStart && i >= newStart && i < newEnd) {
      this[i] = value
    }
  }
  return this
}

标签:end,len,js,start,数组,Array,prototype
From: https://www.cnblogs.com/shenhf/p/18622331

相关文章

  • Java中使用四叶天动态代理IP构建ip代理池,实现httpClient和Jsoup代理ip爬虫
    在本次爬虫项目中,关于应用IP代理池方面,具体完成以下功能:从指定API地址提取IP到ip池中(一次提取的IP数量可以自定义更改)每次开始爬虫前(多条爬虫线程并发执行),从ip池中获取一条可用ip和端口号(并用此ip进行代理爬虫)每条IP的有效时间为1~5分钟,如果爬虫过程中当前代理ip失效时,程......
  • jquery响应式弹出层lightbox插件slick-lightbox.js
    slick-lightbox.js是一款基于slick.js和jquery的响应式弹出层lightbox插件。该jquerylightbox插件支持图片懒加载,支持键盘交互,支持HTML5HistoryAPI等。功能非常强大。在线预览  下载 安装可以通过bower来安装slick-lightbox.js插件。bowerinstall-Sslick-lightbo......
  • .NET 9 New features-JSON序列化
    .NET9已经发布有一段时间了,近期整理一下.NET9的新特性,今天重点分享.NET9JSON序列化方面的改进。先引用官方的说明:在 System.Text.Json 中,.NET9提供了用于序列化JSON的新选项和新的单一实例,可以更轻松地使用Web默认值进行序列化。举个实际的例子,缩进选项JsonSer......
  • 游泳溺水识别数据集,对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别
    游泳溺水识别数据集:对9984张原始图片进行YOLO,COCOJSON,VOCXML格式的标注,平均识别率在91.7%以上,可识别泳池或者水库中是否有人溺水。 数据集分割训练组98%        9818图片有效集%        0图片测试集2%        166图片......
  • Arrays.asList() 详解
    【1.要点】该方法是将数组转化成List集合的方法。Listlist=Arrays.asList("a","b","c");注意:(1)该方法适用于对象型数据的数组(String、Integer...)(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)(3)该方法将数组与List列表链接起来:当更新其......
  • node.js毕设基于hive的超市订单数据分析系统 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于超市订单数据分析系统的研究,现有研究主要以传统关系型数据库为主,专门针对基于Hive构建超市订单数据分析系统的研究较少。Hive作为一种数据仓库基础......
  • node.js毕设 “双鲤”国画作品交易平台的设计与实现 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于国画作品交易平台的研究,现有研究主要以西方绘画作品交易平台为主,专门针对国画作品交易平台的研究较少。在国画作品交易领域,现有的交易模式多依赖传......
  • Springmvc进一步学习(springmvc-mybatis):跳转不经过视图解析器、controller如何保存数
    上一章的springmvc回顾内容:1.springmvc框架:主要作用:处理客户的请求,并处理数据,以及响应客户。2.springmvc搭建流程:  [1]引入springmvc依赖。spring-webmvc  [2]编写springmvc配置文件。   1.包扫描<context:component-scanbasepackage=""/>   ......
  • axios--基于vuejs的封装,实现nodejs服务器的前端请求响应
    官网地址:https://www.axios-js.com/zh-cn/docs/vue-axios.html基于ref的变量显示打开下载好的vuehello2项目,打开main.js,添加:importaxiosfrom'axios'importVueAxiosfrom'vue-axios'下方添加:.use(VueAxios,axios)注意安装:npminstallaxiosvue-axios找到SubHello1.vu......
  • node.js毕设 德州大学定制化外卖点餐系统 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于外卖点餐系统的研究,现有研究主要集中在通用型的外卖平台设计与优化方面,如配送算法改进、用户界面优化等 [1] 。专门针对特定大学(如德州大学)定制化......