第一题
console.log(a + a.a + a.a.a + a.a.a.a + a.a.a.a.a + a.a.a.a.a.a); // 要求打印出 -> "abcdef" console.log(a + a.a + a.a.a); // 要求输出 "abc"
主要考察String
//reduce版本
var a = ((arr)=>{
var _o ={};
arr.reduce((obj,node,idx)=>{
obj.a ={
toString:function(){
return arr[idx +1];
}
};
return obj.a;
},_o);
_o.toString = function(){
return arr[0];
}
return _o;
})(['a','b','c','d','e','f'])
// 遍历版本
var a =((values)=>{
const o = {};
let node = o;
for(let i=0,l=values.length;i<l;i++){
node.toString=()=>{
return values[i]
}
node.a = {}
node = node.a;
}
return o
})(['a','b','c','d','e','f'])
第二题
console.log(add(1)(2)(3)(4)); // 要求输出: 10
// 无脑实现业务版本
function add(a){
return (b)=>{
return (c)=>{
return (d)=>{
console.log(a+b+c+d)
}
}
}
}
//正常迭代版本 主要用到柯里化
function curry( fn, oArgs ) {
oArgs = oArgs || [];
return function () {
var len = fn.length,
args = oArgs.concat( [].slice.call(arguments) ),
argLen = args.length;
if(argLen < len) {
return curry( fn, args);
}else {
return fn.apply(this, args);
}
}
}
function add (a, b, c, d) {
return a + b + c + d;
}
add = curry(add);
题目三:
实现一个plus方法,实现修复精度功能 0.1 + 0.2 -> 返回 0.3
function plus (a, b) {
var alen = (a.toString().split('.')[1]).length;
var blen = (b.toString().split('.')[1]).length;
var powerC = Math.power(10,Math.max(alen,blen));
return (a * powerC + b * baseNum) / powerC;
}
console.log(plus(0.1, 0.2)); // 打印0.3
console.log(plus(0.1, 0.7)); // 打印0.8
题目四:
console.log(obj + 10); // 打印20
console.log(JSON.stringify(obj)); // 打印100
var obj = {
toString(){
return 10;
},
toJSON(){
return 100;
}
}