思考题 重复字符串
16 May 2016

jansesun原创,转载请注明出处

之前在UESTC前端群里跟一些朋友分享了一些javascript的思考题,旨在促进群内技术讨论,共同进步。期间不乏思维的火花,一直想将这些宝贵的财富沉淀下来,以便日后翻阅。

String.prototype.repeat是ES2015(ES6)新加的方法,对于要兼容各种浏览器的苦逼前端来说,想尝鲜就必须写polyfill,而且在没有这个方法之前我们也经常需要用到类似的方法来将某些数位补0等。

比较有意思的是,今年一月份找工作面试滴滴的时候,还被问到这个问题,第一次感觉到自己平时的积累有了用武之地。

重复字符串

String.prototype.repeat = String.prototype.repeat || function(n) {
	return Array(n + 1).join(this);
}

按位补齐 这个方案在ES2017中已经提上日程了,将来可以用String.prototype.padStart补齐

String.prototype.padStart = String.prototype.padStart || function(maxLength, fillString = ' ') {
	let str = '' + this;
	if(str.length >= maxLength) {
		return str;
	}
	fillString = ('' + fillString) || ' ';
	let fillLen = maxLength - str.length;
	let times2Repeat = Math.ceil(fillLen / fillString.length);
	return fillString.repeat(times2Repeat).slice(0, fillLen) + str;
}

按位补零

按位补零当然可以用上面的padStart, 当然补0可以更加简单

function addZero(str, maxLength) {
	return ('' + str).padStart(maxLength, 0);
}

按位补零定制版

function addZero(str, maxLength) {
	let str += '';
	if(str.length >= maxLength) {
		return str;
	}
	return '0'.repeat(maxLength - str.length) + str;
}

每次写这种主题的时候就想口诛笔伐万恶的浏览器厂商,什么时候才能一统天下,解放前端劳苦大众呢?