常见的面试编程题

86 阅读3分钟

1、请写一个程序,找出字符串“kqaznba”,出现次数最多的字符,出现多少次

// 看题目可知答案是 a  2
function get(str) {
    let arr = str.split("")
    let obj = {};
    arr.map(item => {
        if (obj[item]) {
            obj[item]++
        } else {
            obj[item] = 1;
        }
    })
    // 排序
    let t = Object.keys(obj).sort((a, b) => obj[b] - obj[a]);
    // 元素    --- 次数
    console.log(t[0] + '---' + obj[t[0]])
}
get('kqaznba')
// a --- 2

2、找出 a = [0, 1, 2, 3, 4, 5],b = [55,3, 4, 5, 6, 7, 8, 2],的非交集

const a = [0, 1, 2, 3, 4, 5]
const b = [2,3, 4, 5, 6, 7, 8,55]

/**
 * 得到两数组非交际索引
 * @param {*array} a 
 * @param {*array} b 
 */
function getIndex(a, b) {
  const oneArr = [];
  [...new Set(a)].map((item, index) => {
    if (!b.includes(item)) {
      oneArr.push(index)
    }
  });
  return oneArr;
}
console.log([...getIndex(a, b)])
console.log([...getIndex(b, a)])
/*
[ 0, 1 ]
[ 0, 4, 5, 6 ]
*/

3、sku算法

摘抄自 juejin.cn/post/684490…

let names = ["iPhone X", "iPhone XS", "iPhone XS111"]
let colors = ["黑色", "白色", "红色"]
let storages = ["64g", "256g", "2996g"]
/**
 * 转换为以下数据
 * [  [ 'iPhone X', '黑色', '64g' ],[ 'iPhone X', '黑色', '256g' ],
      [ 'iPhone X', '黑色', '2996g' ],[ 'iPhone X', '白色', '64g' ],
      [ 'iPhone X', '白色', '256g' ],[ 'iPhone X', '白色', '2996g' ],
      [ 'iPhone X', '红色', '64g' ],[ 'iPhone X', '红色', '256g' ],
      [ 'iPhone X', '红色', '2996g' ],[ 'iPhone XS', '黑色', '64g' ],
      [ 'iPhone XS', '黑色', '256g' ],[ 'iPhone XS', '黑色', '2996g' ],
      [ 'iPhone XS', '白色', '64g' ],[ 'iPhone XS', '白色', '256g' ],
      [ 'iPhone XS', '白色', '2996g' ],[ 'iPhone XS', '红色', '64g' ],
      [ 'iPhone XS', '红色', '256g' ],[ 'iPhone XS', '红色', '2996g' ],
      [ 'iPhone XS111', '黑色', '64g' ],[ 'iPhone XS111', '黑色', '256g' ],
      [ 'iPhone XS111', '黑色', '2996g' ],[ 'iPhone XS111', '白色', '64g' ],
      [ 'iPhone XS111', '白色', '256g' ],[ 'iPhone XS111', '白色', '2996g' ],
      [ 'iPhone XS111', '红色', '64g' ],[ 'iPhone XS111', '红色', '256g' ],
      [ 'iPhone XS111', '红色', '2996g' ] 
  ]
 */
let combine = function (...chunks) {
  let res = []
  let helper = function (chunkIndex, prev) {
    // console.log(chunkIndex)
    // console.log(prev)
    let chunk = chunks[chunkIndex]
    let isLast = chunkIndex === chunks.length - 1
    for (let val of chunk) {
      // cur = ['iPhone X','黑色','64g']
      let cur = prev.concat(val)
      if (isLast) {
        // 如果已经处理到数组的最后一项了 则把拼接的结果放入返回值中
        res.push(cur)
      } else {
        helper(chunkIndex + 1, cur)
      }
    }
  }

  // 从属性数组下标为 0 开始处理
  // 并且此时的 prev 是个空数组
  helper(0, [])
  return res
}
console.log(combine(names, colors, storages))

4、写一个将金额转为大写的函数

//金额转换
function convertCurrency(money) {
    //汉字的数字
    let cnNums = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
    //基本单位
    let cnIntRadice = new Array("", "拾", "佰", "仟");
    //对应整数部分扩展单位
    let cnIntUnits = new Array("", "万", "亿", "兆");
    //对应小数部分单位
    let cnDecUnits = new Array("角", "分", "毫", "厘");
    //整数金额时后面跟的字符
    let cnInteger = "整";
    //整型完以后的单位
    let cnIntLast = "元";
    //最大处理的数字
    let maxNum = 999999999999999.9999;
    //金额整数部分
    let integerNum;
    //金额小数部分
    let decimalNum;
    //输出的中文金额字符串
    let chineseStr = "";
    //分离金额后用的数组,预定义
    let parts;
    if (money == "") { return "";}
    money = parseFloat(money);
    if (money >= maxNum) {
        //超出最大处理数字
        return "";
    }
    if (money == 0) {
        chineseStr = cnNums[0] + cnIntLast + cnInteger;
        return chineseStr;
    }
    //转换为字符串
    money = money.toString();
    if (money.indexOf(".") == -1) {
        integerNum = money;
        decimalNum = "";
    } else {
        parts = money.split(".");
        integerNum = parts[0];
        decimalNum = parts[1].substr(0, 4);
    }
    //获取整型部分转换
    if (parseInt(integerNum, 10) > 0) {
        let zeroCount = 0;
        let IntLen = integerNum.length;
        for (let i = 0; i < IntLen; i++) {
            let n = integerNum.substr(i, 1);
            let p = IntLen - i - 1;
            let q = p / 4;
            let m = p % 4;
            if (n == "0") {
                zeroCount++;
            } else {
                if (zeroCount > 0) {
                    chineseStr += cnNums[0];
                }
                //归零
                zeroCount = 0;
                chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
            }
            if (m == 0 && zeroCount < 4) {
                chineseStr += cnIntUnits[q];
            }
        }
        chineseStr += cnIntLast;
    }
    //小数部分
    if (decimalNum != "") {
        let decLen = decimalNum.length;
        for (let i = 0; i < decLen; i++) {
            let n = decimalNum.substr(i, 1);
            if (n != "0") {
                chineseStr += cnNums[Number(n)] + cnDecUnits[i];
            }
        }
    }
    if (chineseStr == "") {
        chineseStr += cnNums[0] + cnIntLast + cnInteger;
    } else if (decimalNum == "") {
        chineseStr += cnInteger;
    }
    return chineseStr;
}

console.log(convertCurrency("10110.125425"))
console.log(convertCurrency("0"))