如何实现与JavaScript find()功能一致的自定义函数?现有代码无法运行
实现和Array.find()一致的自定义函数
先明确你代码里的几个核心问题:
copyFind把数组硬编码在内部,无法处理任意数组,原生find是数组实例方法,应该让函数能接收目标数组和回调函数两个参数- 回调函数的参数逻辑错误,原生
find的回调会接收当前元素、当前索引、原数组三个参数,你却把整个数组传给回调,还写死了判断条件,完全不符合find的通用设计 copyFind没有返回回调的执行结果,就算回调找到了元素,外层也拿不到这个值
下面是修正后的代码,完全复刻原生find的行为:
// 自定义find函数,接收目标数组和回调函数 const customFind = (arr, callback) => { // 遍历数组每一项 for (let i = 0; i < arr.length; i++) { // 把当前元素、索引、原数组传给回调,判断返回值是否为真值 if (callback(arr[i], i, arr)) { // 找到符合条件的元素,立即返回并终止遍历 return arr[i]; } } // 遍历完所有元素都没找到,返回undefined return undefined; }; // 测试示例 const testArr = [1, 2, 3, 4, 5, 6, 7]; // 调用自定义函数,传入数组和判断回调 const result = customFind(testArr, (item) => item > 3); console.log(result); // 输出4,和原生find行为一致
如果想做成和原生一样的数组实例方法(比如arr.customFind(callback)),可以这么写:
// 给Array原型添加自定义方法 Array.prototype.customFind = function(callback) { // this指向调用该方法的数组实例 for (let i = 0; i < this.length; i++) { if (callback(this[i], i, this)) { return this[i]; } } return undefined; }; // 测试 const testArr = [1, 2, 3, 4, 5, 6, 7]; const result = testArr.customFind(item => item > 3); console.log(result); // 输出4
关键细节说明
- 回调函数必须兼容三个参数:当前元素、索引、原数组(和原生API对齐,实际使用时可按需取舍)
- 只要回调返回真值,就立即返回当前元素并停止遍历
- 遍历结束无匹配元素时,返回
undefined - 纯循环实现,未依赖其他数组方法
内容的提问来源于stack exchange,提问作者user19163646
相关产品推荐
相关产品推荐

