`
zuroc
  • 浏览: 1302523 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

淘宝07招聘题(1.css定位 2.js去重复) 我的解法

阅读更多
题目见http://ued.taobao.com/blog/2007/11/20/job_test_explanation/

1.使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。

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

1.

#xxx{
text-align:center;
width:200px;
height:200px;
border:1px solid #ff0;
vertical-align: middle;
display: table-cell;
}
#xxx img{
/* ff和opera已经正确居中,这里只需要对ie hack,以毒攻毒  */
margin-top:expression(100-this.height/2);
}


2.
对于css选择器等等应用,性能是一个很大的问题,我优先考虑效率:)
如果被gmail2.0,csdn的blog等等,卡得半死过的话,就知道性能是一个永恒的问题
Array.prototype.unique=function(){
  var temp=[],objlist=[],dict={};
  for(var i=this.length-1;i>=0;--i){
    if(typeof (this[i])=="object"){//还有function等

//可以动态根据时间生成一个uuid为名字的属性,以免覆盖
//比如var exist=__exist+(new Date()).getTime()
//然后用this[i][exist]访问
      if(this[i].__exist){
        temp.push(this[i]);
      }else {
        this[i].__exist=1;
        objlist.push(this[i]);
      }
    }else {
      if(this[i] in dict){
        temp.push(this[i]);
      }else {
        dict[this[i]]=1;
        objlist.push(this[i]);
      }
    }
  }
  for(var i=objlist.length-1;i>=0;--i){
    objlist[i].__exist=null;
    this[i]=objlist[i];
  }
  this.length=objlist.length;
  return temp;
};
var a=[1,2,3,3,2,1,2];
alert(a.unique());
alert(a);
分享到:
评论
15 楼 hax 2008-01-07  
使用sort的同志,请执行:

alert(['1',1,'1',1,'1',{toString:function(){return '1'}},{valueOf:function(){return 1}}].sort().map(function(x){return x + ' ' + typeof x}))

注:所用的map()是javascript 1.6增加的方法,spidermonkey(ff)和rhino有原生支持,其它引擎中要自己写一个。
14 楼 yanzimywife 2008-01-07  
引用
题2 太简单了,1分钟搞定

执行最快速,代码最精减,

Array.prototype.unique=function(){
this.sort();
var a = [];
for(var i=this.length-1;i>-1;i--)
{
if( this[i] != a[ a.length - 1 ] )
a.push(this[i]);
}
return a;
}

alert([1,2,3,3,2,1,34,2,8,9,23,6,7,3,9,23,4,32,3,0,43].unique());

咱们想到一块去了,呵呵!
13 楼 hax 2007-12-28  
zcfg 写道
楼主过于自恋了,在css中用expression绝对是下下之举;还有你的unique方法,在数组中加个元素null,再试试?


你也有点自恋。就这个题目来说,用expression是ok的。至于null的问题,原题本身就不严谨。当然如果做题的人做的严谨一点当然更好。
12 楼 chpn 2007-12-28  
<script>
Array.prototype.getDistinctItems=function(){
	var tmp=this.slice(0,this.length).sort();
	var a = [];
	for(var i=tmp.length-1;i>-1;i--)
	{
		if(typeof tmp[i] !="undefined" &&  tmp[i] != a[ a.length - 1 ] )
			a.push(tmp[i]);
	}
	return a;
}
alert([1,2,3,3,2,1,3,34,2,234,223,23,332,221,3,33,23,4,32,32,323,43].getDistinctItems());
</script>
11 楼 chpn 2007-12-28  
题2 太简单了,1分钟搞定

执行最快速,代码最精减,

Array.prototype.unique=function(){
this.sort();
var a = [];
for(var i=this.length-1;i>-1;i--)
{
if( this[i] != a[ a.length - 1 ] )
a.push(this[i]);
}
return a;
}

alert([1,2,3,3,2,1,34,2,8,9,23,6,7,3,9,23,4,32,3,0,43].unique());
10 楼 dingyuan 2007-12-13  
这个题目出得就强人所难,本身这个问题最好就用表格,用这么多方法,写这么多代码,不如嵌入一个表格实际...w3c从来就没有把表格踢出标准之外,表格也属于盒模型的范围
9 楼 zcfg 2007-12-13  
楼主过于自恋了,在css中用expression绝对是下下之举;还有你的unique方法,在数组中加个元素null,再试试?
8 楼 zuroc 2007-12-13  
afcn0 写道
首先我不知道uniq大都应该出现在什么场合,个人认为不知道干什么用,其次性能来说,当然是使用js1.6的Array新方法indexOf性能最好,其次如果没有原生indexOf或者原生indexOf效率不好,那最简单的也就是splice和i--;这也是比较简单的,比较效率高的。但从语法上理解,这个效率是最高的,因为其他的使用中间数组的,如果要修改原数组引用都需要2次循环。但是对于不需要修改原数组引用,include判断显然最合适。

我晕倒,看看算法的复杂度,indexOf是O(n^2),我的对应于html element是O(n)
7 楼 afcn0 2007-12-13  
首先我不知道uniq大都应该出现在什么场合,个人认为不知道干什么用,其次性能来说,当然是使用js1.6的Array新方法indexOf性能最好,其次如果没有原生indexOf或者原生indexOf效率不好,那最简单的也就是splice和i--;这也是比较简单的,比较效率高的。但从语法上理解,这个效率是最高的,因为其他的使用中间数组的,如果要修改原数组引用都需要2次循环。但是对于不需要修改原数组引用,include判断显然最合适。
6 楼 zuroc 2007-12-12  
"如果一架飞机看起来很棒,那它一般飞的也不差"]
我也听说
"金玉其外,败絮其中也哉"
"人不可貌相"
哲学的游戏永远没有结论

"清晰的逻辑用最简单的代码"
这是依靠封装而不是把实际问题想象得简单:)

当然实际问题简单时也没有必要复杂化
但是unique是一个很常用的操作,在纯ajax网页(比如gmail)中往往要处理大量数据.
所以我认为:
每天都用的轮子应该优先考虑性能
正如
我们要用节油的汽车:O

5 楼 afcn0 2007-12-12  
怎么说呢,一句话,就和哪个什么飞机一样,如果一架飞机看起来很棒,那它一般飞的也不差,web开发也是,应该把清晰的逻辑用最简单的代码表述出来,用最正确的工具解决最需要解决的问题才是问题的关键,如果代码看起来很好,那它一般工作起来也不次,所以如果使用最正确解决办法,和最清晰代码会给高分,性能是一个很有趣的问题,webkit opera jscript spidermonkey rhino都不一样,任何性能优化都是建立在大量实现测试上的,纯逻辑说什么性能好比较空.
4 楼 zuroc 2007-12-12  
1.
"expression始终是css之外的东西,web就是要分离css js才要避免使用expression"

是 用药疗毒 还是 以毒攻毒 都有用处
2.
"uniq重要的不是性能"
如果用gmail2.0的话,被csdn的blog卡的半死的话,就知道性能是一个永恒的问题
3 楼 afcn0 2007-12-12  
jquery怎么做不代表那么做就是正确的,expression始终是css之外的东西,web就是要分离css js才要避免使用expression,并且也根本没有必要,宁可使用table一行一列垂直居中我也不用expression,uniq重要的不是性能,而是严谨,逻辑清晰,所以这样写
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;   
}   

是最严谨,当然即使这样,还是要考虑弱类型转换之间的问题,那就看需要是否===了
2 楼 zuroc 2007-12-12  
jquery在对__exist属性做法是动态根据时间生成一个uuid为名字的属性

expression不错:)ff和opera已经正确居中,这里只需要对ie hack
1 楼 afcn0 2007-12-12  
第一,expression不能用,解法background最好
第二,unique,太费劲,来回来去倒动好几次,还对于object类型实行了侵入属性,如果原来对象存在_exist属性呢,所以不好,最后=null不好,使用delete,我的给分65分

相关推荐

    wow.min.js和animate.css

    首先,"wow.min.js" 是一个JavaScript库,它主要用于检测用户的滚动行为,当用户滚动到特定元素时,可以触发预先设定的CSS3动画。这个库由Matthieu Aussaguel创建,它的主要功能是与"animate.css"配合,使得网页元素...

    bootstrap.min.css

    bootstrap.min.css

    bootstrap.min.js和bootstrap.min.css

    在标题和描述中提到的"bootstrap.min.js"和"bootstrap.min.css"是Bootstrap的核心文件,它们包含了框架的主要功能。 "bootstrap.min.js"是Bootstrap的压缩版JavaScript库,它包含了一系列用于交互和动态效果的插件...

    toastr.js toastr.css 下载

    5. **非侵入性**:Toastr.js 不会改变你的DOM结构,而是通过CSS定位在页面上,避免与你的其他元素发生冲突。 Toastr.css 文件则是配合Toastr.js 使用的样式表,包含预定义的样式,使得通知看起来更加美观和专业。它...

    使用pyLDAvis的实例结果,及d3.min.js,ldavis.v1.0.0.css,ldavis.v1.0.0.js

    1. d3.min.js,ldavis.v1.0.0.css,ldavis.v1.0.0.js三个文件内容 2. pyLDAvis的实例 3. 实例请参考:https://blog.csdn.net/weixin_35757704/article/details/123150467

    MUI【mui.min.css,mui.min.js,mui.ttf】

    这个压缩包包含三个核心文件:`mui.min.css`、`mui.min.js` 和 `mui.ttf`,它们是MUI框架的基本组成部分。 `mui.min.css` 是MUI的精简版样式表文件,它包含了MUI框架的所有基本样式规则。这些规则覆盖了各种UI组件...

    CSS中常用的 reset.css文件

    因此,在使用`reset.css`时,最好结合`normalize.css`或现代的CSS重置方法,如`Eric Meyer Reset`或`sanitize.css`,它们不仅重置样式,还会保留一些有助于无障碍浏览和语义化的默认样式。 在实际项目中,可以将`...

    bootstrap.css.map

    这个文件对于前端开发者来说具有重要的意义,因为它有助于在调试时快速定位CSS样式。 首先,我们来解释一下什么是CSS Map(Source Map)。在进行CSS预处理或后处理时,如Sass、Less等,会生成压缩过的CSS文件,以...

    jquery.min.js+bootstrap.min.js+bootstrap.min.css

    标题中的"jquery.min.js+bootstrap.min.js+bootstrap.min.css"提到了三个关键的JavaScript和CSS文件,这些都是在Web开发中非常重要的资源。jQuery是一个高效、简洁的JavaScript库,而Bootstrap则是一个流行的前端...

    ace.rar_ace.min.css_ace.min.js_avatar2.p

    ACE前端模块是Web开发中的一款强大且功能丰富的代码编辑器,它主要由`ace.min.css`、`ace.min.js`和可能的图像资源如`avatar2.p`等组成。这个压缩包文件`ace.rar`包含了这些核心组件,使得开发者能够在网页上实现高...

    fullpage.js结合animate.css实现滚屏动画

    fullpage.js结合animate.css实现滚屏动画,每段代码都加有详细注释 文章地址:https://blog.csdn.net/cplvfx/article/details/80649574

    vant.min.js/css

    "vant.min.js" 是 Vant 库的压缩版本 JavaScript 文件,包含了所有 Vant 组件的代码。这个文件经过了压缩处理,减小了文件大小,有利于加快页面加载速度。在 HTML 项目中,你需要在 `&lt;head&gt;` 标签内通过 `&lt;script&gt;` ...

    vue.js动画需要的animate.css和velocity.js

    Vue.js 是一个流行的前端JavaScript框架,它主要用于构建用户界面,尤其在单页应用程序(SPA)中广泛应用。Vue.js 提供了一套丰富的指令和组件系统,让开发者能够方便地创建交互式用户界面。然而,Vue.js 自身并不...

    bootstrap-combined.min.css

    bootstrap-combined.min.css

    jquery-ui-1.8.16.custom.min.js/jquery-ui-1.8.16.custom.css

    这个压缩包包含两个关键文件:`jquery-ui-1.8.16.custom.min.js` 和 `jquery-ui-1.8.16.custom.css`,这些都是jQuery UI的特定版本,即1.8.16。这个版本在当时是一个广泛使用的稳定版本,提供了丰富的功能和组件。 ...

    bootstrap-4.6.2下载bootstrap.min.cssbootstrap.bundle.min.js

    通过`bootstrap.min.css`和`bootstrap.bundle.min.js`,开发者可以享受到Bootstrap的样式和JavaScript组件,而`about.css`则为自定义样式提供了空间。在实际使用时,确保正确引用这些文件,并根据项目需求调整或扩展...

    leaflet.js leaflet.css

    Leaflet.js 和 Leaflet.css 是两个在Web地图开发中至关重要的资源,主要用于创建交互式的、移动设备友好的二维地图。这两个文件分别代表了JavaScript库和样式表,它们共同构成了Leaflet地图库的基础。 Leaflet.js ...

    jquery.min.js+bootstrap.min.js+bootstrap.min.css.zip

    标题 "jquery.min.js+bootstrap.min.js+bootstrap.min.css.zip" 提供的信息表明,这是一个包含三个核心文件的压缩包,它们是前端开发中常用的库和框架。这个压缩包整合了 jQuery、Bootstrap 的 JavaScript 和 CSS ...

    WeUI 最新版 js 及 css 下载

    使用 &lt;!-- head 中 --&gt; &lt;link rel="stylesheet" href=...-- 如果使用了某些拓展插件还需要额外的JS --&gt; [removed][removed] [removed][removed]

    Video需要的js和css文件

    在网页开发中,视频播放功能是一项重要的组成部分,而"Video需要的js和css文件"这个主题则涉及到在网页上实现视频播放所必需的JavaScript库和样式表文件。在这个压缩包中,我们找到了三个核心文件:video.min.js,...

Global site tag (gtag.js) - Google Analytics