当前位置: 首页 > article >正文

简单算法题收录

  1. 展开嵌套数组
    检查数组中的项是数组的话也要对其进行展开,将展开的结果通过concat拍平放到当前数组中,完成数组展开
function flat(ar) {
  let arr = []

  for (var i = 0; i < ar.length; i++) {
    if (Array.isArray(ar[i])) arr = arr.concat(flat(ar[i]))
    else arr.push(ar[i])
  }

  return arr
}
  1. 实现一个数组的reduce
    reduce的作用是将数组中的值通过某种规律聚合到一起,最终将聚合的结果返回
function reduce(arr, fn, initialValue) {
  if (arr.length === 0) return initialValue
  let hasInitialValue = initialValue !== undefined
  let index, res
  if (hasInitialValue) {
    index = 0
    res = initialValue
  } else {
    index = 1
    res = arr[0]
  }
  for (; index < arr.length; index++) {
    res = fn(res, arr[index], index, arr)
  }
  return res
}
  1. 实现一个深拷贝
    针对需要拷贝的值再进行一次拷贝
function deepClone(data) {
  let needCopy = Array.isArray(data) || (data && typeof data === 'object')
  if (!needCopy) return data
  let _data = null
  
  if (Array.isArray(data)) {
    _data = data.reduce((total, cur) => {
      total.push(deepClone(cur))
      return total
    }, [])
  } else {
    _data = Object.keys(data).reduce((total, cur) => {
      total[cur] = deepClone(data[cur])
      return total
    }, {})
  }

  return _data
}
  1. 实现一个可以循环引用的深拷贝
    如果内容被拷贝过就直接返回,不拷贝了
function deepClone(data) {
  const caches = [] // 拷贝的内容缓存一下
  return _deepClone(data)

  function _deepClone(data) {
    let needCopy = Array.isArray(data) || (data && typeof data === 'object')
    if (!needCopy) return data
    if (caches.includes(data)) return data // 检查是否被拷贝过
    caches.push(data)
    let _data = null
    
    if (Array.isArray(data)) {
      _data = data.reduce((total, cur) => {
        total.push(_deepClone(cur))
        return total
      }, [])
    } else {
      _data = Object.keys(data).reduce((total, cur) => {
        total[cur] = _deepClone(data[cur])
        return total
      }, {})
    }

    return _data
  }
}
原文地址:https://blog.csdn.net/letterTiger/article/details/136857519
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/274405.html

相关文章:

  • adb端口转发
  • 如何评价deepseek-V3 VS OpenAI o1 自然语言处理成Sql的能力
  • MATLAB语言的循环实现
  • 代码随想录刷题day04|(数组篇)209.长度最小的子数组
  • [0405].第05节:搭建Redis主从架构
  • 前端JavaScript中some方法的运用
  • 【Python操作基础】——变量操作
  • HarmonyOS(鸿蒙)快速入门
  • Avalon总线学习
  • 杨氏矩阵的查找(复杂度<O(N))
  • 水牛社推荐:2024年在家也能赚大钱的五个副业兼职
  • SpringBoot + MyBatisPlus分页查询
  • 外包干了6天,技术明显进步。。。
  • 【二分】第十三届蓝桥杯省赛C++ A组《青蛙过河》(C++)
  • 策略模式在项目中实际应用
  • springboot企业级抽奖项目-整体展示
  • 腾讯云服务器多少钱一个月?5元1个月,这价格没谁了
  • linux单机部署hadoop
  • RK3588_Qt交叉编译环境搭建
  • jenkins 连接harbor 推送镜像
  • 简单对已有云服务器进行linux环境搭建以及共享服务器
  • Nginx安装和平滑升级
  • 流畅的Python(二十一)-类元编程
  • 框架篇常见面试题
  • mysql重构
  • Livox激光雷达 mid360 跑 fastlio2 - 流程记录