数组中去除重复元素 求解释这段代码或更好方法

a597926661 2012-02-13 02:32:09
Array.prototype.distinct=function(){
var a=[],b=[];
for(var prop in this){
var d = this[prop];
if (d===a[prop]) continue; //防止循环到prototype
if (b[d]!=1){
a.push(d);
b[d]=1;
}
}
return a;
}

这是在一个帖子里看到的一段代码 去除数组中重复元素 额 看不大懂 var prop in this 这是定义为下标吗? 第一个if判断语句又是什么意思 有点晕 寻高手为菜鸟解答 若有更好的方法更请赐教(最好带说明 体谅一下新手 拜谢)
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MadEric 2012-02-13
  • 打赏
  • 举报
回复
楼上代码调整格式的时候错了一行,修正如下:

Array.prototype.distinct = function () {
var a = [], b = [];
for (var i = 0; i < this.length; i++) {
if (b[this[i]] != 1) {
a.push(this[i]);
b[this[i]] = 1;
}
}
return a;
}
MadEric 2012-02-13
  • 打赏
  • 举报
回复
第一个if是防止循环到prototype中的distinct。如果用另外一种循环方式就很容易理解了。

Array.prototype.distinct = function () {
Array.prototype.distinct = function () {
var a = [], b = [];
for (var i = 0; i < this.length; i++) {
if (b[this[i]] != 1) {
a.push(this[i]);
b[this[i]] = 1;
}
}
return a;
}
MrChapter 2012-02-13
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
Array.prototype.Contains = function (obj) {
if (this == null || this.length <= 0) {
return false;
}
var flag = false;
for (var i = 0; i < this.length; i++) {
if (this[i] == obj) {
flag = true;
break;
}
}
return flag;
}
Array.prototype.Distinct = function () {
if (this.length == 0) {
return this;
}
var array = [];
for (var i = 0; i < this.length; i++) {
if (array.Contains(this[i]) == false) {
array.push(this[i]);
}
}
return array;
}

var a = new Array("0", "1", "0", "0", "2");
for (var i = 0; i < 1000; i++) {
a.push((i % 3).toString());
}
alert(a.join());
alert(a.Distinct().join());
</script>
</head>
<body>
</body>
</html>
MrChapter 2012-02-13
  • 打赏
  • 举报
回复
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
Array.prototype.Contains = function (obj) {
if (this == null || this.length <= 0) {
return false;
}
var count = 0;
for (var i = 0; i < this.length; i++) {
if (this[i] == obj) {
count++;
}
}
return count > 0;
}
Array.prototype.Distinct = function () {
if (this.length == 0) {
return this;
}
var array = [];
for (var i = 0; i < this.length; i++) {
if (array.Contains(this[i]) == false) {
array.push(this[i]);
}
}
return array;
}

var a = new Array("0", "1", "0", "0", "2");
alert(a.join());
alert(a.Distinct().join());
</script>
</head>
<body>
</body>
</html>
tzg157 2012-02-13
  • 打赏
  • 举报
回复
for(var prop in this){//循环遍历this,this中相应对象的key赋给prop变量。
if (d===a[prop]) continue;//去重
三石-gary 2012-02-13
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100604/09/eb9f87ca-7d8f-44b4-b4f0-9815dcc05dfc.html

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧