Skip to content

[ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]做扁平化处理并最终得到一个升序的不重复数组

查看详情
javascript
const arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]

// 1
Array.from(new Set(arr.flat(Infinity))).sort((a, b) => a - b)

// 2
Array.from(new Set(arr.toString().split(",").map(Number))).sort((a, b) => a - b)

// 3
[...(new Set(arr.flat(Infinity)))].sort((a, b) => a - b)

将数组[5,1,3,4,2]按升序排列

查看详情
javascript
const arr = [5, 1, 3, 4, 2];
// 轮数
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]];
    }
  }
}

实现数组的 reverse 方法

查看详情
javascript
function reverse(arr) {
  const len = arr.length;
  const middleItemIndex = Math.floor(arr.length / 2);
  for (let i = 0; i < middleItemIndex; i++) {
    [arr[i], arr[len - 1 - i]] = [arr[len - 1 - i], arr[i]];
  }
  return arr;
}

将字符串'12345'反转

查看详情
javascript
const str = '12345';
const str1 = [...str].reverse().join('');

有一个数组,取出里边能组成三角形最长的三根

查看详情
javascript
function longestTrianglePerimeter(arr) {
  // 降序排序
  arr.sort((a, b) => b - a);

  // 查找能组成三角形的最长周长的三根边
  for (let i = 0; i < arr.length - 2; i++) {
    if (arr[i] < arr[i + 1] + arr[i + 2]) {
      // 找到能组成三角形的边
      return [arr[i], arr[i + 1], arr[i + 2]];
    }
  }

  // 如果没有找到能组成三角形的边,返回一个空数组
  return [];
}

递归求斐波那契数列的第 n 项

查看详情
javascript
function fibonacci(n, memo = {}) {
  // 检查是否在记忆表中
  if (memo[n] !== undefined) {
    return memo[n];
  }

  // 基本情况
  if (n === 0) {
    return 0;
  } else if (n === 1) {
    return 1;
  } else {
    // 递归情况并存储结果到记忆表中
    memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo);
    return memo[n];
  }
}

获取100以内的质数

查看详情
javascript
function getPrimesUpTo(num) {
  const arr = new Array(num + 1).fill(true);
  arr[0] = arr[1] = false;

  for (let i = 2; i * i <= num; i++) {
    if (arr[i]) {
      for (let j = i * i; j <= num; j +=i) {
        arr[j] = false;
      }
    }
  }

  const primes = [];
  for (let i = 2; i <= num; i++) {
    if (arr[i]) {
      primes.push(i)
    }
  }

  return primes
}

数组随机排序

查看详情
javascript
// 1
function randomSort(arr) {
  const len = arr.length
  for (let i = 0; i < len; i++) {
    const randomIndex = Math.floor(Math.random() * len);

    [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]];
  }

  return arr;
}

// 2
function randomSort(arr) {
  arr.sort(() => Math.random() - 0.5);

  return arr;
}

实现flatten方法

查看详情
javascript
const list = [1,2,[3,4,[5,6], 7], [8]];
// 1
function flatten(arr) {
  while(arr.some((item) => Array.isArray(item))) {
    arr = [].concat(...arr);
  }

  return arr;
}

// 2
function flatten(arr) {
  return [].concat(...arr.map(item => Array.isArray(item) ? flatten(item) : item));
}

// 3
function flatten(arr) {
  return arr.flat(Infinity)
}

两数之和

查看详情
javascript
function fn(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    const targetIndex = arr.indexOf(target - arr[i]);

    if (targetIndex > -1) {
      return [i, targetIndex]
    }
  }
}