無標題文檔

JavaScript 数组的 uniq 方法

请给 Array 本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),
返回值是一个包含被删除的重复条目的新数组。

Lazy 兄弟给出了它自己的解法,而我个人认为这样的解法算法上还有需要改进的地方。正如回复中 fdcn 兄弟所说,如果将数组:[1, 2, 3, 3, null, null, 2] 带入 Lazy 兄的函数,那么按照循环判断条件就会退出,导致数组之后的元素就不会判断了。

下面给出我的解决方法:

Array.prototype.uniq = function(){
    var tmp    = new Array;
    var length = this.length;

    for(var i = 0; i < length; i++) {
        var push = true;
        var item = this[i];

        for(var j = i + 1; j < length; j++) {
            if(this[j] == item) {
                push = false;
            }
        }

        if(push == true) {
            tmp.push(item)
        }
    }

    return tmp;
}

Lazy 兄弟也说到每次循环都将重新计算 length 会有开销,那么我将 legth 定义为一个常量,原数组为「只读」,那么 length 相对不变,就不要重复计算了。然后再定义一个数组往里面扔「垃圾」。

数组嵌套循环并不遍历原数组的每一个元素,仅判断剩余没有出现的值。最后获得一个是否 push 的布尔值,然后跳出循环判断是否插入。

最后,欢迎大家交流讨论。


更新,和 Lazy 兄弟讨论后,我发现此函数写得也不是非常的严谨。因为它没有修改原函数的元素,于是我又作了如下的修改:

Array.prototype.uniq = function(){
    var tmp    = new Array;
    var length = this.length;

    for(var i = 0; i < length; i++) {
        var push = true;
        var item = this[i];

        for(var j = i + 1; j < length; j++) {
            if(this[j] == item) {
                push = false;
            }
        }

        if(push) {
            tmp.push(item)
        }
    }

    this.length = tmp.length;
    for (var i = 0; i < tmp.length; i++) {
        this[i] = tmp[i];
    }

    return tmp;
}

但这样又出现了一个问题,就是重复赋值会不会增加时间长度。因为我是在取出来了以后再做一次循环重新赋值给原数组。按照我这样的写法实现已经没有问题,但是效率可能需要进一步的调整。

继续改进ing


不好意思,再次更新。根据上述的问题,我重新优化了下算法,并将 Lazy 兄弟的「思想」加了进来,于是就有如下的代码了:

Array.prototype.uniq = function(){
    var i = 0, j = 0;
    while (undefined !== this[i]){
        j = i + 1;
        while(undefined !== this[j]){
            if (this[i] === this[j]) {
               this.splice(j, 1);
            }
            ++j;
        }

        ++i;
    }

    return this;
}

是的,非常的短,不过却能完成题目所给的要求了。这个相对我以前的函数,有一个好处就是没有生成另外的一个数组。而且也没有像第二个函数这样的重复赋值。

嗯,我想目前这个样子已经能满足题目的要求了。

Vim/Cscope 入门指导

Cscope 确实能给开发带来不少的方便。这篇篇幅不长的 Vim/Cscope 入门指导 可以让大家很快熟悉怎么使用 Vim 编辑器 调用 Cscope。

由于翻译的时间比较短(加上本人水平不高又很懒),有错误的地方请兄弟们不吝指出。废话不多说,下面是一些下载链接:

HTML 版本 PDF 版本 ZIP 打包(PDF 版本)

另,需要学习 Vim 的朋友可以看下上次翻译的 清单式学习 VI 编辑器 文档。

-- UPDATE--

2008-09-24 更改下载链接

已经连续加了一个月的班了

最近似乎心烦的事情特别的多。不知不觉已经连续加班一个月了,期间也曾经闹过几次情绪,不过到最后还是偃旗息鼓了。回过头来想想,发现自己有些自虐的倾向:就算偶尔的几天不加班,发现夜晚过得特别得漫长。

似乎现在人都在亚健康的状态上徘徊,我现在开始担心我会不会过劳了。相比其他的任何东西,我觉得没有什么比健康更重要的了。

在这里我点名批评下 wiLdGoose 兄弟 ,前几天我得知他又病了,上吐下泻。这小子太不爱惜自己了。

https://friable.rocks/_/2007_12_04/464424690.jpg

加班也不仅仅是我目前这个公司的特色,其他公司也一样。 某时某公司的某人 ,还在办公室里累得睡着了。我的一个朋友也说过,搞 IT 的就是拿自己的青春当赌注。看来,确实是这样。

说道这里,想起来某次饭局上的经典话语。「程序员好比是小×姐,越到晚上越精神;两者都是拿自己的身子换取生计、都是吃青春的饭碗;他们之间唯一的区别就是程序员所面对的是老×板,而小×姐的客户除了老×板还有广大民众。」

想到这里,我觉得我还是幸福的:「构建和×谐×社×会,全面建设小×康×生×活」。

谁会去在意什么 Web 标准

https://friable.rocks/_/2007_11_07/1194380593.png

蓝色论坛被解封 以后,我仍旧还是一如既往的去那里潜水。当我翻阅「WEB 标准讨论」板块的时候,我发现有很多的兄弟牢骚为为什么实现标准会那么的难。这不是偶然现象了,在很多地方我都会看到这样的评论。

庆幸的是本站由于页面非常的简陋,所以能够很容易的 通过 XHtml 严格版的认证 。但我并没有发现通过此认证会给我带来什么好处:浏览量上去了,还是用户普遍赞扬我的网站能在不同的浏览器打开效果都一样了?

至于标准,在经过狂热的代码优雅的追求以后,我对它的看法已经逐渐地发生了改变。这个问题就得先回到我们为什么要做网站的起点上来。不管你目前的网站是否是营利性的,出发点就只有一个:就是面向客户

客户是否就因为你的网站通过了所谓的 Web 标准就每天来拜访呢?我想这个结论是显而易见的.紧扣用户眼球的不是网站的页面如何的漂亮、而是内容。一个只有花哨的页面而没有实际内容的网站,会在用户的赞扬声中随即被关闭窗口(当然相反的极端情况也不用说)。

而我目前的观点就是 Web 标准仅仅是技术层面上的范畴,这与用户无关。用户要的是效果、功能以及内容。回想起我以前「耻笑」 Google 怎么连 DOCTYPE 都不加上一个,这个时候我想想反倒是可以理解了。

Web 标准中的 XHtml 标准与其说是标准,按照我想法还不如说是一种_思想_,它的主要目的就是实现 DOM 分离:也就是 结构(XHTML)、表现(CSS)和功能(Javascript)的分离。有了这种思想以后就可以非常容易的实现 Web 标准(当然,这还是需要一定的技术经验)。

如果你不会在 xhtml 中加入 onclick 和 style 属性(这完全可以定义一个 id 然后让 Javascript 和 CSS 另外去处理);也不用完全嵌套 N 个 DIV(因为你已经知道 xhtml 本身就能够非常详尽的描述页面框架),那么你的页面本身就是标准化了(听起来非常简单,不是么?)。

最后 Realazy 上面的一篇文章非常的经典:《 谁在意什么 Web 标准 》,看标题和本文就很相似,不过他也有自身独到的见解,建议看看。

本站 Gracecode.com 目前已经通过了 XHTML 严格版的认证,而简陋的页面或许有一个好处就是结构能够足够的清晰:本站的代码希望能够对各位有用处。欢迎各位兄弟有空能上本人的网站逛逛,但愿能够找到你感兴趣的。

定制 404 页面的一些心得

很多兄弟和我一样,有时候会在 404 页面上面花些功夫。好的 404 页面不仅仅可以装饰站点,而且还可以对搜索引擎优化(SEO)有帮助。

看到 一篇文章 ,它列出了很多对于定制 404 页面非常好的建议,下面我将其列出来:

  1. Use appealing visual elements.
  2. Provide alternatives for navigation.
  3. Offer an overview of possibly related posts.
  4. Communicate with your visitors.
  5. Be sincere and cool.
  6. Be user-friendly.
  7. (Don't) provide too many options.
  8. (Don't) provide too little options.
  9. DWYWTD (Do Whatever You Want To Do)

简要的翻译如下:

  1. 利用有吸引力的视觉元素
  2. 使用导航作为替代
  3. 提供可能相关的链接
  4. 与你的访客沟通
  5. 真诚和冷静(应该指风格)
  6. 友好的用户界面
  7. 提供太多的选择
  8. 提供过少的选择
  9. DWYWTD (发挥想象)

很可能这些经验和总结还不够的完整,不过已经很受用了。下面是 Party 时间,请同学们观看 我的 404 页面 并呕吐三分钟:

https://friable.rocks/_/2007_12_04/1888889968.jpg

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章