第一季终结篇:告别8级菜鸟
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

Description:

You’re working on some interesting console application and you want to line up some of your lines just right. A lot of your data is nested down so you’ve got code like this all over:

console.log('Root ->');
console.log('    Sub-node');
console.log('    Sub-node->');
console.log('        Sub-sub-node');
...

but that just looks terrible and doesn’t scale well for variable levels of nesting. Oh, if only you could write something more like:

console.log('Root->');
console.log(' '.repeat(4) + 'Sub-node');
console.log(' '.repeat(4) + 'Sub-node->');
console.log(' '.repeat(8) + 'Sub-sub-node');
...

菜鸟出招

String.prototype.repeat = function(count) {
  // Go for it
  var a = "";
  for (var i = count; i > 0; i--) {
    a += this.valueOf();
  }
  return a;
};

偷师学艺

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

关键字积累

  • join

菜鸟反思

在写这篇文章的这一天,是我的20岁农历生日,代码战争中也刚好告别了8级。虽然在这短短几天,在走向8段的漫漫长路上,只向前走了短短几小步,但是在遇到任何问题上从没放弃,不能精妙的解决问题,也会用自己的笨人笨法尝试。

从明天开始,将会不间断连载第二季:向着6级奔跑前行,文章格式将会小幅度改变,加入更多个人原创元素,希望大家会喜欢。

评论
发表评论
5年前

@yanlv 哈哈,是。我对一些术语的中文译名叫啥都有点模糊…

5年前

@尤小右 较下真,是位操作符或二进制操作符而不是二元操作符。几乎不用位操作符,理解起来有困难。

6年前

@Bolt_白衣苍狗 简单来说,同样是重复16次的话,你的算法需要拼接16次字符串,数据量和操作量之比是线性的,进来是n,出来也是n,也就是O(n)。2元运算符是每一个循环把字符串翻个倍,所以只需要4次字符串拼接(16 = 2的4次方),也就是O(log2(n))。

6年前

@夏小虫–_– 常来关注我专栏哈,长长知识还要节约时间

6年前

这么努力,再看看我自己哎。

6年前

@尤小右 前辈,我当年数据结构没学好,知道这是空间、时间复杂度,但是不知道怎么算的,能给我解释一下么。

6年前

速度最优的解法应该是用2元运算符,O(log2(n)) vs O(n)

    function stringRepeat(str, num) {
        num = Number(num);

        var result = '';
        while (true) {
            if (num & 1) { // (1)
                result += str;
            }
            num >>>= 1; // (2)
            if (num <= 0) break;
            str += str;
        }

        return result;
    }

ES6的官方实现也是类似的方法。

WRITTEN BY
BoltDoggy
A doggy named Bolt.
TA的新浪微博
PUBLISHED IN
My Code Wars 我的代码战争【休息一下】

这里讲述的是一个8级(kyu)菜鸟立志成为8段(dan)大神的故事。

他在代码战争中一次次遭遇挫败,而又在乱炖中获得高人指点。

遥想当年自高自大,而今终知天外有天。

坚持要走出一条自己的路,这是一条不归路。


Bolt 在写underscore.js源码分析专栏的时候发现了一个问题,就是看别人写的代码的时候自认为看懂了,但实际上有理解错误自己也不知道。

另外就是看了再牛逼的代码,自己写的时候,还是那些小套套。

于是 Bolt 开了一个新专栏:My Code Wars 我的代码战争。在同一需求下,菜鸟写的代码与大神有什么区别,是思维方式不同,还是什么原因导致的?

欢迎大家来新专栏提供意见和建议。

我的收藏