js算法题

一、将字符串qin_chuang_qin_chuang转为qinChuangQinChuang;

let arr = str1.split("_");
let str = arr[0];
for (let i = 1; i < arr.length; i ++) {
  arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1);
  str += arr[i]
}

二、输出啥

var a = 10;
function add() {
  var a = 0;
  return function () {
    a += 1;
    console.log(a);
  }
}
var a1 = add();
var a2 = add();
a1(); // 1
a2(); // 1
a1(); // 2
a2(); // 2

三、将金额转为千分位

let num = 12345678.9
let arr = num.toString().split(".");
var result="", index = 0, len = arr[0].length-1;
while(len >= 0) {
  index % 3 === 0 && index !== 0 ? result += "," + arr[0][len] : result += arr[0][len];
  len --;
  index ++;
};
result = result.split("").reverse().join("") + "." + arr[1];

 四、判断数组的方式

//通过原型链做判断
obj.__proto__ === Array.prototype;
//通过ES6的Array.isArray()做判断 Array.isArrray(obj);
//通过instanceof做判断 obj instanceof Array;
//通过Array.prototype.isPrototypeOf Array.prototype.isPrototypeOf(obj);
//通过Object.prototype.toString.call()做判断 Object.prototype.toString.call(obj).slice(8, -1) === "Array";

 五、手写reduce实现map

Array.prototype.Mmap = function (fn, thisArg) {
  const result = [];
  this.reduce((prev, curr, index, array) => {
    result[index] = fn.call(thisArg, array[index], index, array);
  }, 0);
  return result;
};

解析:

  arr.reduce((previousValue, currentValue, currentIndex, array) => {}, initialValue?)

    reduce 接收两个参数,第一个参数为函数,指定了每次迭代调用的函数,函数的返回值为下一次迭代的 previousValue;第二个参数为初始值,是可选的。若不指定初始值,那么第一次迭代的 previousValue 为 arr[[0], currentValue 为 arr[1], currentIndex 为 1,若指定初始值,那么第一次迭代的 previousValue 为 initialValue, currentValue 为 arr[0], currentIndex 为 0

六、css实现一个扇形

<style>
        .pie {
            position: relative;
            margin: 10px auto;
            padding: 0;
             320px;
            height: 320px;
            border-radius: 50%;
            list-style: none;
            overflow: hidden;
            border: 1px solid red;
        }
        .slice {
            overflow: hidden;
            position: absolute;
            top: 0; 
            right: 0;
             50%;
            height: 50%;
            transform-origin: 0% 100%; 
            background-color: black;
        }
        .slice-one {
            transform: rotate(30deg) skewY(-30deg);
            background: black;
        }
        .slice-two {
            transform: rotate(-30deg) skewY(-30deg);
            background: yellow;
        }
        .slice-three {
            transform: rotate(-90deg) skewY(-30deg);
            background: black;
        }
        .slice-four {
            transform: rotate(-150deg) skewY(-30deg);
            background: yellow;
        }
        .slice-five {
            transform: rotate(-210deg) skewY(-30deg);
            background: black;
        }
        .slice-six {
            transform: rotate(-270deg) skewY(-30deg);
            background: yellow;
        }
 </style>
<!-- 扇形 -->  
    <ul class='pie'>
        <li class='slice-one slice'> </li> 
        <li class='slice-two slice'> </li>
        <li class='slice-three slice'> </li>
        <li class='slice-four slice'> </li>
        <li class='slice-five slice'> </li>
        <li class='slice-six slice'> </li>
    <ul>

 七、数组偏平化

function flatten(arr){
  return arr.reduce(function(prev, cur){
    return prev.concat(Array.isArray(cur) ? flatten(cur) : cur)
  }, [])
}
Talk is cheap,show me the code
原文地址:https://www.cnblogs.com/qc-one/p/15054522.html