论坛首页 AJAX版 JavaScript

一道Javascript面试题

浏览 4694 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-23
有一道Javascript的笔试题目。

题目如下:

编写函数,用于过滤一个数组内重复的元素,并用这些元素重构一个新数组,新数组内也不能有重复元素。

/*
   *
   * @author:unwonk@msn.com
   */
	
Array.prototype.indexOf = function(val){
    var index = -1;
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) {
            index = i;
            break;
        }
    }
    return index;
}
Array.prototype.hasOf = function(val){
    var has = 0;
    for (var i = 0; i < this.length; i++) {
        if (this[i] === val) 
            has += 1;
    }
    return has;
}
Array.prototype.popRepeat = function(){
    var arr = this, newArray = [], arrlen = arr.length, i = 0;
    while (i < arrlen) {
        if (arr.hasOf(arr[i]) > 1) {
            arr.splice(i, 1);
            arrlen--;
            if (newArray.indexOf(arr[i]) < 0) 
                newArray.push(arr[i]);
        }
        else {
            i++;
        }
    }
    return newArray;
}
/**
 * test 
 */
var array = [6, 4, 4, 'abc',function(){alert('abc')},4, 4, {a:1,b:3,c:5}, 3, 3, 7, 1, {a:1,b:2}, 3, 3, 3, 2, 2, 2, 2, 9, 99, 9, 9, 5, 5];
var newArray=array.popRepeat();
alert(array);
alert(newArray);

  

打印出来也许不是我们想要的结果。

期待最优化的解决方案。兄弟们~~请。
   
最后更新时间:2007-11-23
看一下Prototype框架Array类的uniq方法,就是你要
   
0 请登录后投票
最后更新时间:2007-11-23
uniq方法只对字符串和数字有效。伙计。
而且原数组他是不改变的。
   
0 请登录后投票
最后更新时间:2007-11-23
楼上不要不懂乱说,Prototype实现的包括对象引用相同检查的,原数组想变,那还不简单,length=0,再push,不要拿这种简单问题来论坛,多google
   
0 请登录后投票
最后更新时间:2007-11-23
Array.prototype.include=function(object){
for (var i=0;i<this.length;i++)
{
if (object==this[i])
return true;
}
return false;
}
Array.prototype.uniq=function(){
var temp=[];
for (var i=0;i<this.length;i++ )
{
if(!temp.include(this[i]))
temp.push(this[i]);
}
return temp;
}
Array.prototype.selfUniq=function(){
var temp=this.uniq();
this.length=0;
for (var i=0;i<temp.length;i++)
{
this.push(temp[i]);
}
return this;
}

这个就是uniq最简单的实现,这个会忽略类型转换,就是1和"1"是一样的,Prototype也是这么处理的,如果需要完全相同,请使用===判断
   
0 请登录后投票
最后更新时间:2007-11-24
对于考察编码能力,虽然这种方式未尝不可,但是感觉只是C的酒瓶装新酒,出题者何不利用JS的FP特性出题,更能体现出题者与面试者的差距,或是还原JS的老本行,--做UI,做个菜单什么的
   
0 请登录后投票
最后更新时间:2007-11-24
也不能那么说,比如这个考察==与===的区别就比较好,还有考察,如何不使用splice使用length 0然后push修改对象引用数组的能力,这个还是有点意义,但是本身uniq没有多大价值。
   
0 请登录后投票
最后更新时间:2007-11-24
afcn0 写道
楼上不要不懂乱说,Prototype实现的包括对象引用相同检查的,原数组想变,那还不简单,length=0,再push,不要拿这种简单问题来论坛,多google


哈哈。好好,多GOOGLE
   
0 请登录后投票
最后更新时间:2007-11-24
淘宝招聘web前端开发的题目有一题与此类似。不过同样的问题是,都太宽泛,几乎无法优化。
   
0 请登录后投票
最后更新时间:2007-11-24
我觉得js需要的不是优化,而是代码简化,好懂,清晰,没有bug,性能一般不是问题
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
JavaEye推荐