前端面试题之数据处理

1. 实现数组的乱序输出

有正序和倒序两种:

const arr = [1, 2, 3, 4, 5];

// for (let i = 0; i < arr.length; i++) {
   
//   const randomIndex = Math.round((Math.random() * (arr.length - 1 - i))) + i;
//   [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]];
// }

let len = arr.length;

for (let i = len - 1; i > 0; i--) {
   
  const j = Math.floor(Math.random() * (i + 1));
  [arr[i], arr[j]] = [arr[j], arr[i]];
}

console.log(arr);

2. 实现数组扁平化

function flatten(arr) {
   
  let res = [];

  for (let i = 0; i < arr.length; i++) {
   
    if (Array.isArray(arr[i])) {
   
      res = res.concat(flatten(arr[i]));
    } else {
   
      res.push(arr[i]);
    }
  }

  return res;
}

3. 字符串反转

String.prototype._reverse = function(a) {
   
	return a.split("").reverse().join("");
}

4. 将数组千分位用逗号隔开

function format(n) {
   
  let str = n.toString();
  let left = str.split('.')[0].split('');
  let right = str.split('.')[1].split('');

  for (let i = left.length - 3; i > 0; i -= 3) {
   
    left[i] = ',' + left[i];
  }

  for (let i = right.length - 3; i > 0; i -= 3) {
   
    right[i] = ',' + right[i];
  }

  return left.join('') + '.' + right.join('')
}
console.log(format(999999.9999));

5. 大数相加

function addBigNum(num1, num2) {
   
  const arr1 = num1.toString().split('').map(Number).reverse();
  const arr2 = num2.toString().split('').map(Number).reverse();

  const res = [];
  let carry = 0;

  const maxLen = Math.max(arr1.length, arr2.length);

  for (let i = 0; i < maxLen; i++) {
   
    const d1 = arr1[i] || 0;
    const d2 = arr2[i] || 0;

    const sum = d1 + d2 + carry;

    res.push(sum % 10);
    carry = Math.floor(sum / 10);
  }

  if (carry > 0) {
   
    res.push(carry);
  }

  return res.reverse().join('');
}

console.log(addBigNum(900000000000, 3000400));

6. 大数相乘

function mulBigNum(num1, num2) {
   
  const arr1 = num1.toString().split('').map(Number).reverse();
  const arr2 = num2.toString().split('').map(Number).reverse();

  const res = Array(arr1.length + arr2.length).fill(0);

  for (let i = 0; i < arr1.length; i++) {
   
    for (let j = 0; j < arr2.length; j++) {
   
      res[i + j] += arr1[i] * arr2[j];

      if (res[i + j] >= 10) {
   
        res[i + j] %= 10;
        res[i + j + 1] += Math.floor(res[i + j] / 10);
      }
    }
  }

  while (res.length > 1 && res[res.length - 1] === 0) {
   
    res.pop();
  }

  return res.reverse().join('');
}

console.log(mulBigNum(444, 3000400));

7. 将js对象转化为树形对象

function jsonToTree(data) {
   
  let res = [];
  let map = {
   };

  data.forEach(item => map[item.id] = item);
  data.forEach(item => {
   
    let parent = map[item.pid];
    if (parent) {
   
      (parent.children || (parent.children = [])).push(item);
    } else {
   
      res.push(item);
    }
  })

  return res;
}

8. 将手机号变为四位*

let tel = 13233269513;
tel = tel.toString();
let arr = tel.split('');
arr.splice(3, 4, "****");
console.log(arr.join(''));

相关推荐

  1. 端面试题数据处理

    2023-12-06 09:14:05       44 阅读
  2. 端面试题html

    2023-12-06 09:14:05       57 阅读
  3. 端面试题css

    2023-12-06 09:14:05       52 阅读
  4. 端面试题-webpack

    2023-12-06 09:14:05       59 阅读
  5. 端面试题 ===> 【HTML】

    2023-12-06 09:14:05       45 阅读
  6. 端面试题 ===> 【CSS】

    2023-12-06 09:14:05       33 阅读
  7. 端面试题详解

    2023-12-06 09:14:05       37 阅读
  8. 端面试题

    2023-12-06 09:14:05       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 09:14:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 09:14:05       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 09:14:05       82 阅读
  4. Python语言-面向对象

    2023-12-06 09:14:05       91 阅读

热门阅读

  1. bash中通过变量中的内容获取对应的关联数组

    2023-12-06 09:14:05       48 阅读
  2. 计算机网络——应用层

    2023-12-06 09:14:05       58 阅读
  3. 大型语言模型在实体关系提取中的应用探索(二)

    2023-12-06 09:14:05       55 阅读
  4. JeecgBoot 框架升级至 Spring Boot3 的实战步骤

    2023-12-06 09:14:05       48 阅读
  5. 采用Python 将PDF文件按照页码进行切分并保存

    2023-12-06 09:14:05       55 阅读
  6. GoLang语言Map用法

    2023-12-06 09:14:05       54 阅读
  7. Usergolang 一些优质关于sip协议包

    2023-12-06 09:14:05       57 阅读