JS算法题总结

1. 对象深克隆

function deepClone(o) {
  if (o === undefined || o === null || typeof o === "number" || typeof o === "string" || typeof o === "boolean") {
    return o
  } else if (Array.isArray(o)) {
    const arr = []
    for (let item of o) {
      // 递归
      arr.push(deepClone(item))
    }
    return arr
  } else if (typeof o === "object") {
    const obj = {}
    for (let key in o) {
      if (o.hasOwnProperty(key)) {
        obj[key] = deepClone(o[key])
      }
    }
    return obj
  }
}

var p1 = {
  name: "xiaoming",
  age: 17,
  hobby: ["code", "girl"]
}

var p2 = deepClone(p1)
console.log(p2)

console.log(p1.hobby === p2.hobby) // false

2. 数组去重

  • 方法一:
var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3]
var arr2 = [...new Set(arr)]
console.log(arr2) // [ 1, 2, 3 ]
  • 方法二:
var arr = [1, 1, 1, 2, 2, 2, 3, 3, 3]

function unique(arr) {
  var res = []
  for (let item of arr) {
    if (!res.includes(item)) {
      res.push(item)
    }
  }
  return res
}

console.log(unique(arr)) // [ 1, 2, 3 ]

3. 数组扁平化

  • 方法一:
// es6
   arr = arr.flat(Infinity)
  • 方法二:
// 数组扁平化
function flatten(arr){
  var res = []
  for(let item of arr){
    if(Array.isArray(item)){
      res = res.concat(flatten(item))
    }else {
      res.push(item)
    }
  }
  return res
}

4. 冒泡排序

// 冒泡排序
    function bubbleSort(arr) {
      for (let i = 0; i < arr.length - 1; i++) {
        for (let j = 0; j < arr.length - 1 - i; j++) {
          if (arr[j] > arr[j + 1]) {
            [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
          }
        }
      }
      return arr
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容