面试官:怎么实现一个对象过滤器?😅

假如你面前的是B站面试官

问:怎么实现一个函数能按指定类型过滤出数组中的对象?

我:?

一、基础实现

核心需求 :实现函数filterByType(arr, type),从数组中筛选出指定类型的元素

typescript 复制代码
function filterByType(arr, type) {
    return arr.filter(item => {
        if (type === 'array') return Array.isArray(item)
        return typeof item === type
    })
}

关键缺陷

  1. 无法正确处理nulltypeof null === 'object'
  2. 对象类型包含数组等特殊类型
  3. 缺少对现代JS类型(如Symbol)的支持

二、类型深度解析

JavaScript类型判断的复杂性体现在:

  • 原始类型undefined, boolean, number, string, bigint, symbol
  • 对象类型object, function, array, Date
  • 特殊值null(伪对象类型)

类型判断方法对比

方法 优点 缺点
typeof 快速判断原始类型 无法区分null/array
instanceof 判断构造函数 跨iframe失效
Object.prototype.toString 精确判断所有类型 需要处理返回字符串
Array.isArray 专用数组判断 仅适用于数组

什么叫跨iframe失效

在 JavaScript 中,​跨执行环境失效 特指 instanceof 等类型判断方法在不同全局作用域(如 iframe、Web Worker、Node.js 的 vm 模块等)中失效的现象。其本质原因是:​不同执行环境拥有独立的内置构造函数,导致原型链无法匹配。

三、进阶实现

typescript 复制代码
function filterByType(arr, type) {
    return arr.filter(item => {
        if (type === 'array') {
            return Array.isArray(item);
        } else if (type === 'null') {
            return item === null;
        } else if (type === 'object') {
            return item !== null && typeof item === 'object' && !Array.isArray(item);
        } else {
            return typeof item === type;
        }
    });
}

四、总结

希望能给各位大佬以后面B站的时候一点点点点点小启发

相关推荐
struggle20251 小时前
continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
javascript·ide·python·typescript·开源
x-cmd1 小时前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
夏之小星星1 小时前
el-tree结合checkbox实现数据回显
前端·javascript·vue.js
为美好的生活献上中指3 小时前
java每日精进 5.11【WebSocket】
java·javascript·css·网络·sql·websocket·网络协议
chenyuhao20244 小时前
链表的面试题4之合并有序链表
数据结构·链表·面试·c#
拖孩5 小时前
【Nova UI】十五、打造组件库之滚动条组件(上):滚动条组件的起步与进阶
前端·javascript·css·vue.js·ui组件库
苹果电脑的鑫鑫5 小时前
element中表格文字剧中可以使用的属性
javascript·vue.js·elementui
一丝晨光5 小时前
数值溢出保护?数值溢出应该是多少?Swift如何让整数计算溢出不抛出异常?类型最大值和最小值?
java·javascript·c++·rust·go·c·swift
Wannaer6 小时前
从 Vue3 回望 Vue2:响应式的内核革命
前端·javascript·vue.js
懒羊羊我小弟6 小时前
手写符合Promise/A+规范的Promise类
前端·javascript