当前位置:首页 > JavaScript

js filter实现

2026-02-01 16:56:22JavaScript

使用 Array.prototype.filter() 方法

filter() 是 JavaScript 数组的一个内置方法,用于创建一个新数组,包含通过指定函数测试的所有元素。该方法不会改变原数组。

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]

自定义 filter 函数实现

可以通过自定义函数模拟 filter 的行为,理解其底层逻辑。

js filter实现

function customFilter(array, callback) {
  const result = [];
  for (let i = 0; i < array.length; i++) {
    if (callback(array[i], i, array)) {
      result.push(array[i]);
    }
  }
  return result;
}

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = customFilter(numbers, num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]

在对象上实现 filter 方法

可以为非数组对象(如类数组对象或自定义对象)实现类似 filter 的功能。

const obj = { a: 1, b: 2, c: 3, d: 4 };

function filterObject(object, callback) {
  const result = {};
  Object.keys(object).forEach(key => {
    if (callback(object[key], key, object)) {
      result[key] = object[key];
    }
  });
  return result;
}

const evenValues = filterObject(obj, value => value % 2 === 0);
console.log(evenValues); // { b: 2, d: 4 }

链式调用 filter 与其他数组方法

filter 可以与其他数组方法(如 mapreduce)结合使用,实现复杂的数据处理。

js filter实现

const numbers = [1, 2, 3, 4, 5];
const doubledEvenNumbers = numbers
  .filter(num => num % 2 === 0)
  .map(num => num * 2);
console.log(doubledEvenNumbers); // [4, 8]

使用 thisArg 参数

filter 方法的第二个参数可以指定回调函数中的 this 值。

const threshold = { min: 2, max: 4 };

function isInRange(value) {
  return value >= this.min && value <= this.max;
}

const numbers = [1, 2, 3, 4, 5];
const filteredNumbers = numbers.filter(isInRange, threshold);
console.log(filteredNumbers); // [2, 3, 4]

处理稀疏数组

filter 方法会跳过稀疏数组中未定义或删除的元素。

const sparseArray = [1, , 3, , 5];
const filteredArray = sparseArray.filter(num => true);
console.log(filteredArray); // [1, 3, 5]

标签: jsfilter
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-contain…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…