【JS】JavaScript基础知识自我检查大过关(第二关)字符串与数组

204 阅读2分钟

嗨!~ 大家好,我是YK菌 🐷 ,一个微系前端 ✨,爱思考,爱总结,爱记录,爱分享 🏹,欢迎关注我呀 😘 ~ [微信号: yk2012yk2012,微信公众号:ykyk2012]

「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战

2. 数组字符串相关

2.1 实现深拷贝

这里来个最常用的~ 可以看我之前的博文有基础版本有进阶版本~

function deepClone(obj){
    if (typeof obj !== 'object' || obj === null){
        return obj
    }
    let result = Array.isArray(obj) ? []: {}
    
    for (let key in obj) {
        if(obj.hasOwnProperty(key)) {
            result[key] = deepClone(obj[key])
        }
    }
    return result
}

【JS】自定义JS工具函数库-自定义对象方法-new-instanceof-mergeObject-实现数组与对象的深拷贝与浅拷贝-封装字符串相关函数

2.2 实现深度比较

// 判断是否是对象或数组
function isObject(obj) {
  return typeof obj === object && obj !== null;
}

// 深度比较
function isEqual(obj1, obj2) {
  if (!isObject(obj1) || !isObject(obj2)) {
    // 值类型,直接判断【一般不会传函数,不考虑函数】
    return obj1 === obj2;
  }
  if (obj1 === obj2) {
    return true;
  }
  // 两个都是对象或数组,而且不相等
  // 1. 先判断键的个数是否相等,不相等一定返回false
  const obj1Keys = Object.keys(obj1);
  const obj2Keys = Objext.keys(obj2);
  if (obj1Keys.length !== obj2Keys.length) {
    return false;
  }
  // 2. 以obj1为基准,和obj2依次递归比较
  for (let key in obj1) {
    // 递归比较
    const res = isEqual(obj1[key], obj2[key]);
    if (!res) {
      return false;
    }
  }
  // 3. 全相等
  return true;
}

2.3 数组的API有哪些是纯函数

纯函数: ①不改变原数组(没有副作用) ②返回一个新数组 : concat、map、filter、slice

非纯函数:push、pop、shift、unshift、forEach、some、every、reduce

【JS】你不得不知道的JavaScript数组相关知识【全面总结】复习专用 - 掘金 (juejin.cn)

2.4 split()join()的区别

  • split() 是字符串的方法
  • join() 是数组的方法
'1-2-3'.split('-') // [1,2,3]
[1,2,3].join('-') // 1-2-3

2.5 数组slicesplice区别

  • slice 切片
  • splice 剪接

【JS】JavaScript数组-操作方法-concat-数组强制打平-slice-splice方法使用

2.6 手写字符串 trim

String.prototype.trim = function() {
  return this.replace(/^\s+/, '').replace(/\s+$/, '')
}