|
精华帖 (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);
打印出来也许不是我们想要的结果。 期待最优化的解决方案。兄弟们~~请。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-11-23
看一下Prototype框架Array类的uniq方法,就是你要
|
|
| 返回顶楼 | |
|
最后更新时间:2007-11-23
uniq方法只对字符串和数字有效。伙计。
而且原数组他是不改变的。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-23
楼上不要不懂乱说,Prototype实现的包括对象引用相同检查的,原数组想变,那还不简单,length=0,再push,不要拿这种简单问题来论坛,多google
|
|
| 返回顶楼 | |
|
最后更新时间: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也是这么处理的,如果需要完全相同,请使用===判断 |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-24
对于考察编码能力,虽然这种方式未尝不可,但是感觉只是C的酒瓶装新酒,出题者何不利用JS的FP特性出题,更能体现出题者与面试者的差距,或是还原JS的老本行,--做UI,做个菜单什么的
|
|
| 返回顶楼 | |
|
最后更新时间:2007-11-24
也不能那么说,比如这个考察==与===的区别就比较好,还有考察,如何不使用splice使用length 0然后push修改对象引用数组的能力,这个还是有点意义,但是本身uniq没有多大价值。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-11-24
afcn0 写道 楼上不要不懂乱说,Prototype实现的包括对象引用相同检查的,原数组想变,那还不简单,length=0,再push,不要拿这种简单问题来论坛,多google
哈哈。好好,多GOOGLE |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-24
淘宝招聘web前端开发的题目有一题与此类似。不过同样的问题是,都太宽泛,几乎无法优化。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-11-24
我觉得js需要的不是优化,而是代码简化,好懂,清晰,没有bug,性能一般不是问题
|
|
| 返回顶楼 | |







