26进制字母
设定如下的对应关系(A=1,B=2,C=3...Z=26,AA=27,AB=28...AAA=xxx...),编写一个转换函数,根据上面的规则把一个字符串转换为数字。
思路:类似于十进制,首先将A—Z对应的值存起来,然后在计算结果时从字符串的最后一位开始计算。比如要转换的是“AB”,就用B对应的数字 × 26的0次方 + A对应的数字 × 26的1次方,依此类推。
function StrToInt(str) {
let result = 0;
var book = {
"A": 1,
"B": 2,
"C": 3,
"D": 4,
"E": 5,
"F": 6,
"G": 7,
"H": 8,
"I": 9,
"J": 10,
"K": 11,
"L": 12,
"M": 13,
"N": 14,
"O": 15,
"P": 16,
"Q": 17,
"R": 18,
"S": 19,
"T": 20,
"U": 21,
"V": 22,
"W": 23,
"X": 24,
"Y": 25,
"Z": 26
}
for (let i = str.length - 1, count = 0; i >= 0; i-- , count++) {
// Math.pow(x,y) x 必需 底数,必须是数字;y 必需,幂数,必须是数字
result += book[str[i]] * Math.pow(26, count)
}
return result;
}
var str = "AC";
console.log(StrToInt(str)); // 29
给输出加序号
要求扩展console.log方法,在每个输出前添加一个自增序号。例如:
console.log("foo"); // 输出:1:foo
console.log("bar"); // 输出:2:bar
思路:首先定义一个方法,在输出时加上序号,然后将系统的console.log当作参数传进去,并将返回值(decorator函数的声明)赋给console.log,然后再调用时只需要给console.log传入参数就可以了。
function logIt(f) {
id = 1
function decorator(message) {
f(id + ":" + message)
id++
}
return decorator
}
console.log = logIt(console.log) // 重定义系统的console.log函数,将系统的函数当成参数传给logIt
console.log("One")
console.log("Two")
console.log("Three")

将数字格式化金额格式,每三位加上逗号
思路:首先调用每个数组元素的 toLocaleString() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
let num = 34782623;
result = formatNum(num);
console.log(result);
function formatNum(num) {
num = num.toLocaleString(); // 把数组转换为本地字符串
return num;
}

实现这样的函数:f(1).value==1;f(1)(2).value==5;f(1)(2)(3).value==9;
思路:给函数 f 添加一个属性value,然后给 f 传入参数val,给val平方赋给全局变量v,最后返回 f,就可以无限调用f,最后再将v的值赋给f的属性value,输出就ok。
var v = 0;
function f (val) {
v += val * val;
return f;
}
f(1)(2).value = v;
console.log(f.value);
网友评论