<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_浙林龙哥 seirsoft blog</title><subtitle type="text">浙林龙哥 seirsoft bloghttp://blog.seirsoft.com</subtitle><id>http://feed.cnblogs.com/blog/u/2667/rss</id><updated>2012-05-07T12:54:21Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/2667/rss"/><entry><id>http://www.cnblogs.com/huqingyu/archive/2012/05/02/2478879.html</id><title type="text">ASP.NET 4.0的ClientIDMode=”Static”未必是最好</title><summary type="text">ASP.NET 4.0新增的ClientIDMode是一項重大的更新，不知這是什的話，可以在這裡看看。 預設ClientIDMode是Inherit 不過我想大多數人都會把焦點放在ClientIDMode=”Static”。由於預設是Inherit，ClientIDMode會以預設的AutoID去制定Controls ID，或者有人會直接在Page Detective把ClientIDMode設定為”Static”供ClientIDMode去Inherit。&lt;%@Page ClientIDMode="Static"%&gt;那就不用每個WebControl都設定一次</summary><published>2012-05-02T05:23:00Z</published><updated>2012-05-02T05:23:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2012/05/02/2478879.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2012/05/02/2478879.html"/><content type="html">&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;ASP.NET 4.0新增的&lt;span style="background-color: #000000;"&gt;&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;&lt;/span&gt;是一項重大的更新，不知這是什　的話，&lt;a href="http://www.asp.net/LEARN/whitepapers/aspnet4#0.2__Toc253429261" target="_blank"&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;可以在這裡看看&lt;/span&gt;&lt;/a&gt;。 預設&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;是Inherit 不過我想大多數人都會把焦點放在&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;=&amp;rdquo;&lt;strong style="color: black; background-color: #ffff66;"&gt;Static&lt;/strong&gt;&amp;rdquo;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;由於預設是Inherit，&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;會以預設的AutoID去制定Controls ID，或者有人會直接在Page Detective把&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;設定為&amp;rdquo;&lt;strong style="color: black; background-color: #ffff66;"&gt;Static&lt;/strong&gt;&amp;rdquo;供&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;去Inherit。&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;&amp;lt;%@Page &lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;="&lt;strong style="color: black; background-color: #ffff66;"&gt;Static&lt;/strong&gt;"%&amp;gt;&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;那就不用每個WebControl都設定一次，但問題就來了，部份Third Party的WebControls未必能可以在&lt;strong style="color: black; background-color: #ffff66;"&gt;Static&lt;/strong&gt; ID下運作，特別是需要ClientScript做CallBack的，可能會找不到Render HTML後的ID。 目前至少AjaxControltoolKit中的AsyncFileUpload已經要設定&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;=&amp;rdquo;AutoID&amp;rdquo;才能正確運作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;而值得看看的是Predictable Mode，Predictable 主要是給Data Control使用，例如Repeater，DataList這些會重複Generate HTML Element的WebControls。 因為當你制定ItemTemplate時，你不可能期望每一項Item中的Controls ID都相同，同樣亦不合理，例如Repeater:&lt;/span&gt;&lt;/p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt; &amp;lt;tr&amp;gt;&lt;br/&gt;   &amp;lt;td&amp;gt;&lt;br/&gt;     &amp;lt;span id="mySpan"&amp;gt;Row1&amp;lt;/span&amp;gt;&lt;br/&gt;   &amp;lt;/td&amp;gt;&lt;br/&gt; &amp;lt;/tr&amp;gt;&lt;br/&gt; &amp;lt;tr&amp;gt;&lt;br/&gt;   &amp;lt;td&amp;gt;&lt;br/&gt;     &amp;lt;span id="mySpan"&amp;gt;Row2&amp;lt;/span&amp;gt;&lt;br/&gt;   &amp;lt;/td&amp;gt;&lt;br/&gt; &amp;lt;/tr&amp;gt;&lt;br/&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;所以&amp;rdquo;Predictable&amp;rdquo;的出現就是給你設定ClientIDRowSuffix property，自行制定。其實我會建議在DataControl中ItemTemplate或EditTemplate下，所有Web Control都加上&lt;strong style="color: black; background-color: #a0ffff;"&gt;ClientIDMode&lt;/strong&gt;為AutoID或者Predictable，即使設成AutoID感覺上很多餘，但基於有override的可能性，都是加上好一點。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; background-color: #ffffff;"&gt;或者ASP.NET老手已經深明這些道理，但剛學ASP.NET的話，亦無需要太追求簡短的ID，這類型ID，&amp;rdquo;ctl00_ContentPlaceHolder1_HideProductImage&amp;rdquo;，我們都習慣了。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2478879.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2012/05/02/2478879.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2012/04/24/2468497.html</id><title type="text">VS 2010 和 .NET 4.0 系列之《ASP.NET 4 Web Forms 的整洁HTML标识 — 客户端ID》篇</title><summary type="text">By saucer | Published: 2010 年 09 月 29 日【原文地址】 Cleaner HTML Markup with ASP.NET 4 Web Forms – Client IDs (VS 2010 and .NET 4.0 Series) 【原文发表日期】 Tuesday, March 30, 2010 7:02 PM【译注；由于工作繁忙，三月份之后一直没有时间翻译Scott Guthrie的博客。欣慰的是，新的贴子已由微软指定的专门公司做了翻译，这里我将补上其间没有翻译的一些技术贴子。 –思归】这是我针对即将发布的VS 2010 和 .NET 4所撰写的 贴子系.</summary><published>2012-04-24T10:09:00Z</published><updated>2012-04-24T10:09:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2012/04/24/2468497.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2012/04/24/2468497.html"/><content type="html">&lt;div class="post-116086 post type-post status-publish format-standard hentry category-1"&gt;&lt;h1 class="entry-title"&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;div class="entry-meta"&gt;By &lt;a class="url fn n" title="View all posts by saucer" href="http://blog.joycode.com/scottgu/archives/author/saucer"&gt;saucer&lt;/a&gt; | Published: &lt;abbr class="published" title="2010-09-29T06:42:19+0000"&gt;2010 年 09 月 29 日&lt;/abbr&gt;&lt;/div&gt;&lt;div class="entry-content"&gt;&lt;p&gt;【原文地址】&lt;a title="VS 2010 和 .NET 4.0 系列之《ASP.NET 4 Web Forms 的整洁HTML标识 -- 客户端ID》篇" href="http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx"&gt; Cleaner HTML Markup with ASP.NET 4 Web Forms &amp;ndash; Client IDs (VS 2010 and .NET 4.0 Series) &lt;/a&gt; 【原文发表日期】 Tuesday, March 30, 2010 7:02 PM&lt;/p&gt;&lt;p&gt;【译注；由于工作繁忙，三月份之后一直没有时间翻译Scott Guthrie的博客。欣慰的是，新的贴子已由微软指定的专门公司做了翻译，这里我将补上其间没有翻译的一些技术贴子。 &amp;ndash;思归】&lt;/p&gt;&lt;p&gt;这是我针对即将发布的VS 2010 和 .NET 4所撰写的 &lt;a href="http://blog.joycode.com/scottgu/archive/2009/08/27/115689.joy" target="_blank"&gt;贴子系列&lt;/a&gt;的第十六篇。&lt;/p&gt;&lt;p&gt;今天的贴子是我将撰写的几个相关贴子的第一篇，主要讨论我们所做的一些重大改动，旨在使ASP.NET 4 的Web Forms生成整洁，与标准相兼容，CSS友好的标识。今天，我将讨论我们正在做的工作，以对由服务器控件显示到客户端的&amp;ldquo;ID&amp;rdquo;属性提供更好的控制。&lt;/p&gt;&lt;p&gt;【&lt;em&gt;除了写博客外，我现在还使用Twitter发短贴和共享链接。请通过&lt;/em&gt;&lt;a href="http://www.twitter.com/scottgu" target="_blank"&gt;twitter.com/scottgu&lt;/a&gt;&lt;em&gt;跟随我。&lt;/em&gt;】&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;整洁，与标准相兼容，CSS友好的标识&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;开发人员对ASP.NET Web Forms经常埋怨的一个东西，就是在使用服务器控件时，他们无法生成整洁的，CSS友好的输出和标识。下面是一些对早期ASP.NET版本的埋怨例子：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;对HTML中自动生成的ID属性难以编写JavaScript来操作和使用CSS来做样式化&lt;/li&gt;&lt;li&gt;某些控件（特别是asp:menu控件）使用了表格（table），而不是更具语义的标识，使得样式很丑陋&lt;/li&gt;&lt;li&gt;一些控件生成了行内的样式属性，尽管控件上没设置样式属性&lt;/li&gt;&lt;li&gt;ViewState经常是大得出奇&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;ASP.NET 4对建造与标准兼容的网页提供了更好的支持, ASP.NET 4 中内置的 &amp;lt;asp:&amp;gt; 服务器控件现在生成干净了许多的标识, 支持CSS样式化,来帮助解决上面提到的所有问题。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;升级现有的ASP.NET Web Forms应用时的标识兼容问题&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;当听说ASP.NET 4即将提供整洁的标识时，大家常问的一个问题是，&amp;ldquo;太棒了，但我现有的应用怎么办？在我升级后，这些变动或改进会不会造成问题？&amp;rdquo;&lt;/p&gt;&lt;p&gt;为帮助确保我们不会破坏现有的ASP.NET Web Forms应用中对标识和样式所做的假设，我们在 web.config中启用了一个配置标记，&lt;em&gt;controlRenderingCompatbilityVersion&lt;/em&gt;，让你决定你是想使用新的ASP.NET 4应用默认的新的整洁标识方式呢，还是为兼容起见，显示与所使用的早期ASP.NET版本同样的标识：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;当&lt;em&gt;controlRenderingCompatbilityVersion&lt;/em&gt;属性设置为&amp;ldquo;3.5&amp;rdquo;时，你的应用和服务器控件会默认使用与VS 2008 和 .NET 3.5一样的标识生成机制来生成输出。当 &lt;em&gt;controlRenderingCompatbilityVersion&lt;/em&gt;属性设置为&amp;ldquo;4.0&amp;rdquo; 时，你的应用和服务器控件会严格遵循XHTML 1.1规格，生成整洁的客户端ID，显示时以语义正确为宗旨，除去不相关的行内样式。&lt;/p&gt;&lt;p&gt;在使用ASP.NET 4建造的所有新的 ASP.NET Web Forms中，该属性的默认值是4.0。使用VS 2010升级的任何以前的应用，都会被升级向导设置&lt;em&gt;controlRenderingCompatbilityVersion&lt;/em&gt;为3.5，以确保向后的兼容性。然后你可以选择改变这个设置（在应用级别，或在web.config文件中局限于页面或目录级别），如果你决定改动页面来使用CSS，来利用新的标识显示机制的话。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;今天的整洁标识标题： 客户端ID&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在生成的HTML元素上能够拥有干净的，可预料的ID属性是开发人员一直要求Web Forms提供的东西(象 &amp;ldquo;ctl00_ContentPlaceholder1_ListView1_ctrl0_Label1&amp;rdquo;这样的ID值实在是不受欢迎)。能够控制生成的ID值有助于简化针对输出编写的客户端JavaScript，简化使用CSS对元素所做的样式化，在大的网页上有助于减少所生成标识的总的大小。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;控件上新的ClientIDMode属性&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;ASP.NET 4在Control这个基类上支持一个新的&lt;em&gt;ClientIDMode&lt;/em&gt;属性。&lt;em&gt;ClientIDMode&lt;/em&gt;属性表示控件在显示时，该如何生成客户端ID值。&lt;em&gt;ClientIDMode&lt;/em&gt; 属性支持4个可能的值：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;AutoID&lt;/strong&gt; &amp;ndash;生成与.NET 3.5一样的输出(为兼容起见，自动生成的ID还会含有象ctrl00这样的前缀)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Predictable (默认值)&lt;/strong&gt;&amp;ndash;除去任何&amp;ldquo;&lt;em&gt;ctl00&lt;/em&gt;&amp;rdquo; ID 字符串，如果是列表或容器控件，则把子控件的ID串列起来 (例子：id=&amp;rdquo;ParentControl_ChildControl&amp;rdquo;)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Static （静态）&lt;/strong&gt;&amp;ndash;将ID命名控制完全交给开发人员，他们设置什么ID值，就显示什么值 (例子： id=&amp;rdquo;JustMyId&amp;rdquo;)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Inherit （继承）&lt;/strong&gt;&amp;ndash;告诉控件使用父容器控件的命名行为模式&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ClientIDMode属性可以直接设置在单独的控件上（或在容器控件中， 内中包含的控件会默认继承该设置）:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;或在页面或用户控件层次设置（使用 &amp;lt;%@ Page %&amp;gt; 或 &amp;lt;%@ Control %&amp;gt; 指令），这样在页面或用户控件中的控件会继承这个设置（还可以选择覆盖这个设置）：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;也可以在应用的web.config文件中设置，这样应用中的所有页面都会继承这个设置（还可以选择覆盖这个设置）：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这给予了你任意定制/覆盖命名行为的灵活性。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;例子：使用ClientIDMode属性控制非列表控件的ID&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;让我们来看一下，如何使用新的&lt;em&gt;ClientIDMode&lt;/em&gt;属性来控制网页中 &amp;ldquo;ID&amp;rdquo; 元素的生成。为帮助示范，我们创建了一个简单的网页，名为&amp;ldquo;SingleControlExample.aspx&amp;rdquo;，是基于名为&amp;ldquo;Site.Master&amp;rdquo;的母版页的，内含单个&amp;lt;asp:label&amp;gt; 控件，其ID为&amp;ldquo;Message&amp;rdquo; ，该控件是包含在名为 &amp;ldquo;MainContent&amp;rdquo;的 &amp;lt;asp:content&amp;gt;容器控件中的：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后在后台代码中，我们加了一些象下面这样的简单的代码，在运行时动态填充Label的 Text属性：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如果我们是在 ASP.NET 3.5 中 运行该应用(或将ASP.NET 4应用配置使用了3.5显示方式或ClientIDMode=AutoID运行的话)，那么生成发送到客户端的标识会是这样的：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这个ID是独特的（是好事），但因为其&amp;ldquo;ct100&amp;rdquo;前缀，又很丑陋（是坏事）。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;使用ASP.NET 4以及ClientIDMode被设置为 &amp;ldquo;Predictable&amp;rdquo;时的标识显示&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在ASP.NET 4中，服务器控件现在默认使用 ClientIDMode=&amp;rdquo;Predictable&amp;rdquo;来生成它们的ID。这帮助确保ID值依然是独特的，在页面上没有冲突，但同时也使得ID不那么冗长，比较可以预料。这意味着我们上面的 &amp;lt;asp:label&amp;gt; 控件生成的标识在ASP.NET 4默认的情形下，会是这样的：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;注意&amp;ldquo;ct100&amp;rdquo;前缀现在没有了。因为 &amp;ldquo;Message&amp;rdquo; 控件是内嵌在&amp;ldquo;MainContent&amp;rdquo; 容器控件中的，在默认情形下，它的ID会被前缀，成为 &amp;ldquo;MainContent_Message&amp;rdquo;，以避免与网页上的其他控件相冲突。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;使用ASP.NET 4以及ClientIDMode被设置为&amp;ldquo;Static&amp;rdquo;&amp;rdquo;时的标识显示&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;但有时，你不想要你的ID值被分层嵌套，而只是想显示你设置的任何值。要启用这个的话，你现在可以使用ClientIDMode=Static，这样显示的ID值会跟你在服务器端在你的控件上设置的ID值&lt;em&gt;&lt;span style="text-decoration: underline;"&gt;完全一样&lt;/span&gt;&lt;/em&gt;。这在ASP.NET 4中会导致下述标识：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这个选项现在给予你完全控制控件发送到客户端的ID的能力。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;例子:使用ClientIDMode属性控制数据绑定列表控件的ID&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;数据绑定的列表/网格在Web Form自动生成的ID方面一直以来一直是最难使用和样式化的。现在让我们来看一个场景，看如何在ASP.NET 4中对使用ListView控件生成的ID进行定制。&lt;/p&gt;&lt;p&gt;下面的代码片段是个ListView控件的例子，显示了一个数据绑定集合（机场）中的内容：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后，我们在后台代码中编写下述代码来动态绑定一个机场列表到上面的ListView上：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;然后在运行时，这会默认生成象下面这样的 &amp;lt;ul&amp;gt; 机场列表。注意，因为 ListView模板中的 &amp;lt;ul&amp;gt; 和 &amp;lt;li&amp;gt; 元素不是服务器控件，在标识中是不会有ID的：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;给每个行项添加客户端ID&lt;/span&gt;&lt;/p&gt;&lt;p&gt;现在，说我们想要给输出添加客户端ID，这样我们可以通过JavaScript使用编程手法来访问每个&amp;lt;li&amp;gt;。我们想要使得这些ID是独特的，可预料的，以及可辨识的。&lt;/p&gt;&lt;p&gt;第一种做法是将模板中的每个 &amp;lt;li&amp;gt; 元素标记为服务器控件（给它一个runat=server属性），并且给其一个id为&amp;ldquo;airport&amp;rdquo;：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在默认情形下，ASP.NET 4现在会生成象下面这样整洁的ID(不生成象ctl001这样的ID):&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;使用ClientIDRowSuffix属性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;我们上面的模板给每个 &amp;lt;li&amp;gt; 元素生成了独特的ID，但假如我们想要在客户端使用JavaScript通过编程手法来访问它们的话，我们也许想要使得ID包含对应的机场的Code属性，以简化引用。好消息是，我们可以轻松地达到目的，通过利用ASP.NET 4中数据绑定控件上的&lt;em&gt;ClientIDRowSuffix&lt;/em&gt;属性来更好地控制单独行元素的ID。&lt;/p&gt;&lt;p&gt;要实现的话，我们将在ListView控件上设置ClientIDRowSuffix属性为&amp;ldquo;Code&amp;rdquo;。这告诉ListView在生成ID时，使用Airport类的&amp;ldquo;Code&amp;rdquo;数据绑定属性：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这样，行的ID后缀不再是&amp;ldquo;1&amp;rdquo;, &amp;ldquo;2&amp;rdquo;, 或 &amp;ldquo;3&amp;rdquo;，而是将Airport.Code值嵌合到ID中去了（例如：_CLE, _CAK, _PDX等等）：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;你也可以在其他数据绑定控件（象GridView）上使用 &lt;em&gt;ClientIDRowSuffix&lt;/em&gt;。在你想要在客户端对行元素进行编程，在JavaScript代码中使用干净的/可辨识的ID来轻松地引用这些元素时，这会非常有用。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;结语&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;ASP.NET 4允许服务器控件和你的Web Forms应用生成干净许多的HTML标识。&lt;/p&gt;&lt;p&gt;在今天的贴子中，我讨论了如何轻松地控&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;相关随笔:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="crp_title" href="http://blog.joycode.com/scottgu/archives/2010/09/30/116090.joy" rel="bookmark"&gt;VS 2010 和 .NET 4.0 系列之《VS 2010中JavaScript Intellisense的改进》篇&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="crp_title" href="http://blog.joycode.com/scottgu/archives/2009/09/05/115699.joy" rel="bookmark"&gt;VS 2010 和 .NET 4.0 系列之《ASP.NET, HTML, JavaScript 代码片段支持》篇&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="crp_title" href="http://blog.joycode.com/scottgu/archives/2010/03/31/115925.joy" rel="bookmark"&gt;使用Silverlight打造一个Windows Phone 7的Twitter应用&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="crp_title" href="http://blog.joycode.com/scottgu/archives/2009/10/23/115755.joy" rel="bookmark"&gt;VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="crp_title" href="http://blog.joycode.com/scottgu/archives/2010/09/29/116087.joy" rel="bookmark"&gt;VS 2010 和 .NET 4.0 系列之《 C# 4 中的可缺省参数和具名实参（以及ASP.NET MVC 2中的一个很酷的场景）》篇&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="entry-utility"&gt;This entry was posted in &lt;a title="查看 未分类 中的全部文章" href="http://blog.joycode.com/scottgu/archives/category/%e6%9c%aa%e5%88%86%e7%b1%bb" rel="category tag"&gt;未分类&lt;/a&gt;. Bookmark the &lt;a title="Permalink to VS 2010 和 .NET 4.0 系列之《ASP.NET 4 Web Forms 的整洁HTML标识 &amp;mdash; 客户端ID》篇" href="http://blog.joycode.com/scottgu/archives/2010/09/29/116086.joy"&gt;permalink&lt;/a&gt;. &lt;a class="comment-link" title="Post a comment" href="#respond"&gt;Post a comment&lt;/a&gt; or leave a trackback: &lt;a class="trackback-link" title="Trackback URL for your post" href="http://blog.joycode.com/scottgu/archives/2010/09/29/116086.joy/trackback" rel="trackback"&gt;Trackback URL&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="navigation"&gt;&lt;div class="nav-previous"&gt;&lt;a href="http://blog.joycode.com/scottgu/archives/2010/09/27/116084.joy" rel="prev"&gt;&amp;laquo; 8月29号的精选好文链接&lt;/a&gt;&lt;/div&gt;&lt;div class="nav-next"&gt;&lt;a href="http://blog.joycode.com/scottgu/archives/2010/09/29/116087.joy" rel="next"&gt;VS 2010 和 .NET 4.0 系列之《 C# 4 中的可缺省参数和具名实参（以及ASP.NET MVC 2中的一个很酷的场景）》篇 &amp;raquo;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2468497.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2012/04/24/2468497.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2012/04/16/2451316.html</id><title type="text">.NET 3.5</title><summary type="text">1).自动属性：private string _name;public string Name { get{return _name;} set{name=value;}}这样子的代码简化成：public string Name { get; set; }好简洁啊~~编译以后会自动增加一个类成员，作用类似于上面的_name，但你根本不需要care注意这个跟interface里面是不一样的2).LINQ可以看博客园的LINQ专题，以下是摘抄扩展方法 没有扩展方法，Linq的实现肯定不会再像现在这么优雅，在本篇中我将首先描述扩展方法的应用，然后从IL层面解释扩展方法的实现，最后给出一些应用扩展方法</summary><published>2012-04-16T02:33:00Z</published><updated>2012-04-16T02:33:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2012/04/16/2451316.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2012/04/16/2451316.html"/><content type="html">&lt;p&gt;1).自动属性：&lt;/p&gt;&lt;p&gt;private string _name;&lt;/p&gt;&lt;p&gt;public string Name { get{return _name;} set{name=value;}}&lt;/p&gt;&lt;p&gt;这样子的代码简化成：&lt;/p&gt;&lt;p&gt;public string Name { get; set; }&lt;/p&gt;&lt;p&gt;好简洁啊~~编译以后会自动增加一个类成员，作用类似于上面的_name，但你根本不需要care&lt;/p&gt;&lt;p&gt;注意这个跟interface里面是不一样的&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2).LINQ&lt;/p&gt;&lt;p&gt;可以看博客园的LINQ专题，以下是摘抄&lt;/p&gt;&lt;p&gt;&lt;strong&gt;扩展方法&lt;/strong&gt;&amp;nbsp; 没有扩展方法，Linq的实现肯定不会再像现在这么优雅，在本篇中我将首先描述扩展方法的应用，然后从IL层面解释扩展方法的实现，最后给出一些应用扩展方法的原则&lt;/p&gt;&lt;p&gt;&lt;strong&gt;匿名方法和Lambda表达式&amp;nbsp; &lt;/strong&gt;Lambda表达式将函数式编程风格带进了C#这种命令编程语言中，Lambda表达式可以编译成表达式树，将表达式树说成Linq的根基我想一点都不为过吧&lt;/p&gt;&lt;p&gt;&lt;strong&gt;匿名类型与隐式类型局部变量&lt;/strong&gt;&amp;nbsp;&amp;nbsp; 如果没有隐式类型局部变量，使用Linq查询的时候不会再像现在这么轻松吧&lt;/p&gt;&lt;p&gt;&lt;strong&gt;对象集合初始化器&lt;/strong&gt;&amp;nbsp;&amp;nbsp; 这个可以减少很多无意义的代码&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;因为增加了以上特性，使得LINQ看起来比较优雅：&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;var result &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; user &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; users &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt; user.UserName.StartsWith(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"AA&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&amp;nbsp;user;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2451316.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2012/04/16/2451316.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/09/21/2183137.html</id><title type="text">Ruby学习1-字符串</title><summary type="text">http://blog.seirsoft.com/html/2011/10/26</summary><published>2011-09-21T02:18:00Z</published><updated>2011-09-21T02:18:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/09/21/2183137.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/09/21/2183137.html"/><content type="html">&lt;p&gt;&lt;a href="http://blog.seirsoft.com/html/2011/10/26"&gt;http://blog.seirsoft.com/html/2011/10/26&lt;/a&gt;&lt;a href="http://blog.seirsoft.com/"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2183137.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/09/21/2183137.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/07/14/2106035.html</id><title type="text">ImageMagick 详细安装使用 linux (jmagick)</title><summary type="text">http://blog.seirsoft.com/html/2011/10/26</summary><published>2011-07-14T02:26:00Z</published><updated>2011-07-14T02:26:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/07/14/2106035.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/07/14/2106035.html"/><content type="html">&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;p&gt;&lt;a href="http://blog.seirsoft.com/html/2011/10/26"&gt;http://blog.seirsoft.com/html/2011/10/26&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2106035.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/07/14/2106035.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081640.html</id><title type="text">Windows XP 上安装 Bind9</title><summary type="text">http://blog.seirsoft.com/?p=276</summary><published>2011-06-15T08:58:00Z</published><updated>2011-06-15T08:58:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081640.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081640.html"/><content type="html">&lt;p align="left"&gt;&lt;b&gt;&lt;a href="http://blog.seirsoft.com/?p=276"&gt;http://blog.seirsoft.com/?p=276&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2081640.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081640.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081635.html</id><title type="text">BIND9配置</title><summary type="text">http://blog.seirsoft.com/?p=278</summary><published>2011-06-15T08:55:00Z</published><updated>2011-06-15T08:55:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081635.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081635.html"/><content type="html">&lt;p align="left"&gt;&lt;b&gt;&lt;a href="http://blog.seirsoft.com/?p=278"&gt;http://blog.seirsoft.com/?p=278&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/2081635.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/06/15/2081635.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/03/21/1990196.html</id><title type="text">天阳棕榈湾有SNS了：http://www.zonglvwan.com</title><summary type="text">天阳棕榈湾有SNS了：http://www.zonglvwan.comblog.seirsoft.com</summary><published>2011-03-21T06:04:00Z</published><updated>2011-03-21T06:04:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/03/21/1990196.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/03/21/1990196.html"/><content type="html">&lt;p&gt;天阳棕榈湾有SNS了：http://www.zonglvwan.com&lt;/p&gt;&lt;p&gt;blog.seirsoft.com&lt;/p&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/1990196.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/03/21/1990196.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977028.html</id><title type="text">[javascript] 数组去重问题</title><summary type="text">数组去重问题src: http://yiminghe.javaeye.com/blog/524716很经典的问题，去除数组中的重复元素，上网搜了一下，发现大多数无论转载还是原创都是这个解法： 错误解法： Js代码 functionuniq(array){ varmap={}; varre=[]; for(vari=0,l=array.length;i&lt;l;i++){ if(typeofmap[array[i]]=="undefined"){ map[array[i]]=1; re.push(array[i]); } } returnre; }function uniq</summary><published>2011-03-08T03:38:00Z</published><updated>2011-03-08T03:38:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977028.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977028.html"/><content type="html">&lt;div class="blog_title"&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cnblogs.cc2/blog/524716"&gt;数组去重问题&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;src: &lt;a href="http://yiminghe.javaeye.com/blog/524716"&gt;http://yiminghe.javaeye.com/blog/524716&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blog_content"&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;很经典的问题，去除数组中的重复元素，上网搜了一下，发现大多数无论转载还是原创都是这个解法：&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: medium;"&gt;错误解法：&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&lt;span&gt;&amp;nbsp;uniq(array)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;map={}; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;re=[]; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;i=0,l=array.length;i&amp;lt;l;i++)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;typeof&lt;/span&gt;&lt;span&gt;&amp;nbsp;map[array[i]]&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"undefined"&lt;/span&gt;&lt;span&gt;){ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map[array[i]]=1; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;re.push(array[i]); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;re; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;function uniq(array) {&lt;br/&gt;var map={};&lt;br/&gt;var re=[];&lt;br/&gt;for(var i=0,l=array.length;i&amp;lt;l;i++) {&lt;br/&gt;if(typeof map[array[i]] == "undefined"){&lt;br/&gt;map[array[i]]=1;&lt;br/&gt;re.push(array[i]);&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;return re;&lt;br/&gt;}&lt;p&gt;&lt;span style="font-size: small;"&gt;如果用过java等高级语言的话，初看这段代码确实没有什么问题：下面的例子：&lt;/span&gt; &lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;uniq([1,2,1,2,4]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;uniq([1,2,1,2,4]);&lt;p&gt;&lt;span style="font-size: small;"&gt;也能正常运行。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;可再试试下面的例子：&lt;/span&gt; &lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;uniq([{x:1},&lt;/span&gt;&lt;span class="string"&gt;"[object&amp;nbsp;Object]"&lt;/span&gt;&lt;span&gt;]); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;uniq([{x:1},{z:2}]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;uniq([{x:1},"[object Object]"]);&lt;br/&gt;uniq([{x:1},{z:2}]);&amp;nbsp;&lt;p&gt;&lt;span style="font-size: small;"&gt;运行一下就会知道错在哪里了！&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: medium;"&gt;HashMap In Java :&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;在 java 中如 HashMap 类可以使用对象做为 key (内部实现使用 hashcode散列到桶 以及桶内equals[默认内存地址]比较)，如：&lt;/span&gt; &lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Java代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Holder&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Test3&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;/** &lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;args &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;main(String[]&amp;nbsp;args)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HashMap&amp;lt;Holder,&amp;nbsp;Holder&amp;gt;&amp;nbsp;map=&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;HashMap&amp;lt;Holder,&amp;nbsp;Holder&amp;gt;(); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Holder&amp;nbsp;key=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Holder(); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Holder&amp;nbsp;value=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Holder(); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;value.i=&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span&gt;; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;map.put(key,&amp;nbsp;value); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Holder&amp;nbsp;key2=&lt;/span&gt;&lt;span class="keyword"&gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Holder();&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(map.get(key).i); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(map.get(key2)); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;class Holder {&lt;br/&gt;int i;&lt;br/&gt;}&lt;br/&gt;public class Test3 {&lt;br/&gt;&lt;br/&gt;/**&lt;br/&gt; * @param args&lt;br/&gt; */&lt;br/&gt;public static void main(String[] args) {&lt;br/&gt;HashMap&amp;lt;Holder, Holder&amp;gt; map=new HashMap&amp;lt;Holder, Holder&amp;gt;();&lt;br/&gt;Holder key= new Holder();&lt;br/&gt;Holder value= new Holder();&lt;br/&gt;value.i=1;&lt;br/&gt;map.put(key, value);&lt;br/&gt;Holder key2=new Holder(); &lt;br/&gt;System.out.println(map.get(key).i);&lt;br/&gt;System.out.println(map.get(key2));&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;}&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: medium;"&gt;Object In Javascript:&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;而在 javascript 中毕竟没有map，只有对象这个概念，而对象则要求其属性值必须为字符串，如果提供给对象的属性不是字符串，那么则会自动调用 toString 方法转化为字符串形式，例如：&lt;/span&gt; &lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;x={}; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;y={ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;toString:&lt;/span&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&lt;span&gt;(){ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"z"&lt;/span&gt;&lt;span&gt;; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;x[y]=1; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;alert(x[&lt;/span&gt;&lt;span class="string"&gt;"z"&lt;/span&gt;&lt;span&gt;]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;var x={};&lt;br/&gt;var y={&lt;br/&gt;    toString:function(){&lt;br/&gt;        return "z";&lt;br/&gt;     }&lt;br/&gt;};&lt;br/&gt;&lt;br/&gt;x[y]=1;&lt;br/&gt;alert(x["z"]);&lt;p&gt;&lt;span style="font-size: small;"&gt;那么由上述例子就可以知道第一个程序为什么是错误的了 。&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: medium;"&gt;正确答案：&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;我们无法利用高级语言提供的map类库，那就只好两遍遍历数组了，也是 taobao ued提供的标准答案：&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;a target="_blank" href="http://www.cnblogs.cc2/blog/369853"&gt;注意 === 使用。&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;/** &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;*unique&amp;nbsp;the&amp;nbsp;array &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;*@param&amp;nbsp;{Array}&amp;nbsp;array&amp;nbsp;array&amp;nbsp;to&amp;nbsp;unique &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;*@return&amp;nbsp;{Array}&amp;nbsp;uniqued&amp;nbsp;array&amp;nbsp;,note&amp;nbsp;change&amp;nbsp;parameter &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&lt;span class="comment"&gt;*/&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&lt;span&gt;&amp;nbsp;undulpicate(array){ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;i=0;i&amp;lt;array.length;i++)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;j=i+1;j&amp;lt;array.length;j++)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//注意&amp;nbsp;=== &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;(array[i]===array[j])&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array.splice(j,1); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j--; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;array; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;}&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;/**&lt;br/&gt;*unique the array&lt;br/&gt;*@param {Array} array array to unique&lt;br/&gt;*@return {Array} uniqued array ,note change parameter&lt;br/&gt;*/&lt;br/&gt;function undulpicate(array){&lt;br/&gt;for(var i=0;i&amp;lt;array.length;i++) {&lt;br/&gt;for(var j=i+1;j&amp;lt;array.length;j++) {&lt;br/&gt;//注意 ===&lt;br/&gt;if(array[i]===array[j]) {&lt;br/&gt;array.splice(j,1);&lt;br/&gt;j--;&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;return array;&lt;br/&gt;}&amp;nbsp;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000080; font-size: large;"&gt;ps: Jquery Uniq Node&lt;/span&gt; &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;如果我们确认数组里每个元素都是对象，那么可以用加标签的方式，给对象元素添加标签，从而把时间复杂度提升到 O(n) :&lt;/span&gt; &lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;x={z:1}; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;y={q:2}; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&lt;span&gt;&amp;nbsp;uniqObjects(array){ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;re=[]; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;i=0,l=array.length;i&amp;lt;l;i++)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;typeof&lt;/span&gt;&lt;span&gt;&amp;nbsp;array[i][&lt;/span&gt;&lt;span class="string"&gt;"_uniqObjects"&lt;/span&gt;&lt;span&gt;]&amp;nbsp;==&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"undefined"&lt;/span&gt;&lt;span&gt;){ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//添加标签 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array[i][&lt;/span&gt;&lt;span class="string"&gt;"_uniqObjects"&lt;/span&gt;&lt;span&gt;]=1; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;re.push(array[i]); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="comment"&gt;//取出标签 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;i=0,l=re.length;i&amp;lt;l;i++)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;delete&lt;/span&gt;&lt;span&gt;&amp;nbsp;re[i][&lt;/span&gt;&lt;span class="string"&gt;"_uniqObjects"&lt;/span&gt;&lt;span&gt;]; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;re; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;uniqObjects([x,y,x]);&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;var x={z:1};&lt;br/&gt;var y={q:2};&lt;br/&gt;function uniqObjects(array){&lt;br/&gt;var re=[];&lt;br/&gt;for(var i=0,l=array.length;i&amp;lt;l;i++) {&lt;br/&gt;if(typeof array[i]["_uniqObjects"] == "undefined"){&lt;br/&gt;//添加标签&lt;br/&gt;                        array[i]["_uniqObjects"]=1;&lt;br/&gt;re.push(array[i]);&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;        //取出标签&lt;br/&gt;for(var i=0,l=re.length;i&amp;lt;l;i++) {&lt;br/&gt;delete re[i]["_uniqObjects"];&lt;br/&gt;}&lt;br/&gt;return re;&lt;br/&gt;}&lt;br/&gt;uniqObjects([x,y,x]);&lt;br/&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;这也正是 jquery 的思路，由于每个元素都是节点数组，当然可以这样做了：&lt;/span&gt; &lt;/p&gt;&lt;div class="dp"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;Js代码 &lt;a href="http://www.cnblogs.cc2/#" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" title="复制代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_copy.gif" alt="复制代码" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="javascript:void()" onclick="code_favorites_do_favorite(this);return false;" title="收藏这段代码"&gt;&lt;img src="http://www.cnblogs.cc2/images/icon_star.png" alt="收藏代码" class="star" /&gt;&lt;img src="http://www.cnblogs.cc2/images/spinner.gif" class="spinner" style="display: none;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp"&gt;&lt;li&gt;&lt;span&gt;&lt;span&gt;unique:&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&lt;span&gt;(&amp;nbsp;array&amp;nbsp;)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;[],&amp;nbsp;done&amp;nbsp;=&amp;nbsp;{}; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;try&lt;/span&gt;&lt;span&gt;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0,&amp;nbsp;length&amp;nbsp;=&amp;nbsp;array.length;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;length;&amp;nbsp;i++&amp;nbsp;)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt;&amp;nbsp;id&amp;nbsp;=&amp;nbsp;jQuery.data(&amp;nbsp;array[&amp;nbsp;i&amp;nbsp;]&amp;nbsp;); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&amp;nbsp;!done[&amp;nbsp;id&amp;nbsp;]&amp;nbsp;)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;done[&amp;nbsp;id&amp;nbsp;]&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;true&lt;/span&gt;&lt;span&gt;; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret.push(&amp;nbsp;array[&amp;nbsp;i&amp;nbsp;]&amp;nbsp;); &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;catch&lt;/span&gt;&lt;span&gt;(&amp;nbsp;e&amp;nbsp;)&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ret&amp;nbsp;=&amp;nbsp;array; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span class="keyword"&gt;return&lt;/span&gt;&lt;span&gt;&amp;nbsp;ret; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;unique: function( array ) {&lt;br/&gt;var ret = [], done = {};&lt;br/&gt;&lt;br/&gt;try {&lt;br/&gt;&lt;br/&gt;for ( var i = 0, length = array.length; i &amp;lt; length; i++ ) {&lt;br/&gt;var id = jQuery.data( array[ i ] );&lt;br/&gt;&lt;br/&gt;if ( !done[ id ] ) {&lt;br/&gt;done[ id ] = true;&lt;br/&gt;ret.push( array[ i ] );&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;} catch( e ) {&lt;br/&gt;ret = array;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;return ret;&lt;br/&gt;},&amp;nbsp;&lt;p&gt;&amp;nbsp;&lt;strong&gt;&lt;span style="color: #800000;"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&lt;span style="color: #800000;"&gt;注意：对基本类型，如 number，string，不要使用这种方式，它们会产生临时对象，并不能达到预期效果！&lt;/span&gt; &lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/1977028.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977028.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977018.html</id><title type="text">[javascript]数组去重</title><summary type="text">数组中去除重复元素的算法:第一种：常用方式。Array.prototype.unique = function () {var r = new Array();label:for(var i = 0, n = this.length; i &lt; n; i++) { for(var x = 0, y = r.length; x &lt; y; x++) { if(r[x] == this[i]) { continue label; } } r[r.length] = this[i];}return r;}第二种：一行代码正则方式。Array.prototype.unique = fu</summary><published>2011-03-08T03:32:00Z</published><updated>2011-03-08T03:32:00Z</updated><author><name>浙林龙哥</name><uri>http://www.cnblogs.com/huqingyu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977018.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977018.html"/><content type="html">&lt;p&gt;数组中去除重复元素的算法:&lt;/p&gt;&lt;p&gt;第一种：常用方式。&lt;/p&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;Array.&lt;span style="color: #660066;"&gt;prototype&lt;/span&gt;.&lt;span style="color: #660066;"&gt;unique&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; r &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;new&lt;/span&gt; Array&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;label&lt;span style="color: #339933;"&gt;:&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; n &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; n&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; x &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; y &lt;span style="color: #339933;"&gt;=&lt;/span&gt; r.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; x &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; y&lt;span style="color: #339933;"&gt;;&lt;/span&gt; x&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;r&lt;span style="color: #009900;"&gt;[&lt;/span&gt;x&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;continue&lt;/span&gt; label&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;r&lt;span style="color: #009900;"&gt;[&lt;/span&gt;r.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; r&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span id="more-168"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;第二种：一行代码正则方式。&lt;/p&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;Array.&lt;span style="color: #660066;"&gt;prototype&lt;/span&gt;.&lt;span style="color: #660066;"&gt;unique&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;sort&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;join&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;",,"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;replace&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="font-style: italic; color: #009966;"&gt;/(,|^)([^,]+)(,,\2)+(,|$)/g&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;"$1$2$4"&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;replace&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="font-style: italic; color: #009966;"&gt;/,,+/g&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;","&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;replace&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="font-style: italic; color: #009966;"&gt;/,$/&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;""&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;.&lt;span style="color: #660066;"&gt;split&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #3366cc;"&gt;","&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第三种：利用javascript语言特性。&lt;/p&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;Array.&lt;span style="color: #660066;"&gt;prototype&lt;/span&gt;.&lt;span style="color: #660066;"&gt;unique&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; temp &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;span style="color: #339933;"&gt;,&lt;/span&gt; len &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; len&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;  &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; tmp &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #339933;"&gt;!&lt;/span&gt;temp.&lt;span style="color: #660066;"&gt;hasOwnProperty&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;tmp&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;temp&lt;span style="color: #009900;"&gt;[&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #3366cc;"&gt;"hoho"&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;length&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;len &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; i &lt;span style="color: #000066; font-weight: bold;"&gt;in&lt;/span&gt; temp&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;len&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; i&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;第四种：循环一遍方式。&lt;/p&gt;&lt;div class="wp_syntax"&gt;&lt;div class="code"&gt;Array.&lt;span style="color: #660066;"&gt;prototype&lt;/span&gt;.&lt;span style="color: #660066;"&gt;unique&lt;/span&gt; &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;function&lt;/span&gt; &lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #003366; font-weight: bold;"&gt;var&lt;/span&gt; temp &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #003366; font-weight: bold;"&gt;new&lt;/span&gt; Array&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;sort&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #000066; font-weight: bold;"&gt;for&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt;i &lt;span style="color: #339933;"&gt;=&lt;/span&gt; &lt;span style="color: #cc0000;"&gt;0&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i &lt;span style="color: #339933;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt; i&lt;span style="color: #339933;"&gt;++&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #000066; font-weight: bold;"&gt;if&lt;/span&gt;&lt;span style="color: #009900;"&gt;(&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt; &lt;span style="color: #339933;"&gt;==&lt;/span&gt; &lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #339933;"&gt;+&lt;/span&gt;&lt;span style="color: #cc0000;"&gt;1&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #009900;"&gt;)&lt;/span&gt; &lt;span style="color: #009900;"&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;continue&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;  temp&lt;span style="color: #009900;"&gt;[&lt;/span&gt;temp.&lt;span style="color: #660066;"&gt;length&lt;/span&gt;&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;=&lt;/span&gt;&lt;span style="color: #000066; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #009900;"&gt;[&lt;/span&gt;i&lt;span style="color: #009900;"&gt;]&lt;/span&gt;&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #000066; font-weight: bold;"&gt;return&lt;/span&gt; temp&lt;span style="color: #339933;"&gt;;&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&lt;br/&gt;&lt;span style="color: #009900;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/huqingyu/aggbug/1977018.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/huqingyu/archive/2011/03/08/1977018.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
