IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 自定义ES6提供的变异方法(forEach、filter、map、some、every、find、findIndex) -> 正文阅读

[JavaScript知识库]自定义ES6提供的变异方法(forEach、filter、map、some、every、find、findIndex)

原理部分

JavaScript 在ES6版本后提供了一些更加便捷的方法供开发者使用,实现原理其实是在对应的构造函数原型提供方法。然后供开发者使用。接下来让我们自定义这些ES6提供的简易函数吧。

变异方法的实现原理

ES6提供的一些方法,底层主要是用for循环实现的,咱们在使用过程中也主要是传递callback来控制输出结果。后边的实现也主要是下边的结构。

Array.prototype.xxx = function (callback) {
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            callback(this[i], i, this)
            // 通过这个callback 控制结果
        }
    }
}

代码实现

// 案例数据
var arr = [
    {
        name: "张三",
        id: 1
    },
    {
        name: "李四",
        id: 2
    },
    {
        name: "王麻子",
        id: -1
    }
]

forEach(数组每个元素都执行一次回调函数)

Array.prototype.forEach = function (callback) {
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            callback(this[i], i, this)
        }
    }
}

filter(检测数值元素,并返回符合条件所有元素的数组)

Array.prototype.filter = function (callback) {
    let temp = []
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            if (callback(this[i], i, this)) {
                temp.push(this[i])
            }
        }
    }
    return temp
}

map(通过指定函数处理数组的每个元素,并返回处理后的数组)

Array.prototype.map = function (callback) {
    let temp = []
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            temp.push(callback(this[i], i, this))
        }
    }
    return temp
}

some(检测数组元素中是否有元素符合指定条件)

Array.prototype.some = function (callback) {
    let temp = false;
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            if (callback(this[i], i, this)) {
                temp = true
                break
            }
        }
    }
    return temp
}

every(检测数值元素的每个元素是否都符合条件)

Array.prototype.every = function (callback) {
    let temp;
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            if (!callback(this[i], i, this)) {
                temp = false
                break
            } else {
                temp = true
            }
        }
    }
    return temp
}

find (返回符合传入测试(函数)条件的数组元素)

Array.prototype.find = function (callback) {
    let temp;
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            if (callback(this[i], i, this)) {
                temp = this[i]
                break
            }
        }
    }
    return temp
}

findIndex(返回符合传入测试(函数)条件的数组元素索引)

Array.prototype.findIndex = function (callback) {
    let temp;
    if (callback && typeof (callback) === 'function') {
        for (let i = 0; i < this.length; i++) {
            if (callback(this[i], i, this)) {
                temp = i
                break
            }
        }
    }
    return temp
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 11:38:44  更:2021-08-16 11:40:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 15:43:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计