常见面试js题目

181 阅读1分钟
/**
 * 快速排序
 * @param {*} arr 排序的数组
 * @returns  {Array}   新的数组
 */
function quickSort (arr) {
  // (1)在数据集之中,选择一个元素作为"基准"(pivot)。
  // (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
  // (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
  if (arr.length <= 1) return arr;
  let midIndex = Math.floor(arr.length / 2);
  let midVal = arr.splice(midIndex, 1)[0];
  let left = [];
  let right = [];
  for (let index = 0; index < arr.length; index++) {
    if (arr[index] < midVal) {
      left.push(arr[index])
    } else {
      right.push(arr[index])
    }
  }

  return quickSort(left).concat([midVal], quickSort(right));
}
/**
 * 深拷贝
 * @param {*} obj  源数据
 * @returns {*} 返回拷贝的对象或数组
 */
function deepClone (obj) {
  //  判断是对象还是数组
  let newObj = obj instanceof Array ? [] : {};
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      if (obj[key] instanceof Object) {
        newObj[key] = deepClone(obj[key])
      } else {
        newObj[key] = obj[key]
      }
    }
  }
  return newObj;
}