javascript模拟map输出与去除重复项的方法

javascript模拟map输出与去除重复项的方法,第1张

本文实例讲述了javascript模拟map输出与去除重复项的方法。分享给大家供大家参考。具体方法如下:

1.Javascriptmap输出

function

Map(){

//

private

var

obj

=

{}

//

空的对象容器,承装键值对

//

put

方法

this.put

=

function(key

,

value){

obj[key]

=

value

//

把键值对绑定到obj对象上

}

//

size

方法

获得map容器的个数

this.size

=

function(){

var

count

=

0

for(var

attr

in

obj){

count++

}

return

count

}

//

get

方法

根据key

取得value

this.get

=

function(key){

if(obj[key]

||

obj[key]

===

0

||

obj[key]

===

false){

return

obj[key]

}

else

{

return

null

}

}

//remove

删除方法

this.remove

=

function(key){

if(obj[key]

||

obj[key]

===

0

||

obj[key]

===

false){

delete

obj[key]

}

}

//

eachMap

变量map容器的方法

this.eachMap

=

function(fn){

for(var

attr

in

obj){

fn(attr,

obj[attr])

}

}

}

//模拟java里的Map

var

m

=

new

Map()

m.put('01'

,

'abc')

m.put('02'

,

false)

m.put('03'

,

true)

m.put('04'

,

new

Date())

//alert(m.size())

//alert(m.get('02'))

//m.remove('03')

//alert(m.get('03'))

m.eachMap(function(key

,

value){

alert(key

+"

:"+

value)

})

2.去除map中重复项

var

arr

=

[2,1,2,10,2,3,5,5,1,10,13]//object

//js对象的特性:在js对象中key是永远不会重复的

/*

var

obj

=

new

Object()

obj.name

=

'z3'

obj.age

=

20

//alert(obj.name)

obj.name

=

'w5'

alert(obj.name)

*/

//

1

数组转成一个js的对象

//

2

把数组中的值,变成js对象当中的key

//

3

把这个对象

再还原成数组

//

把数组转成对象

function

toObject(arr){

var

obj

=

{}

//

私有的对象

var

j

for(var

i=0

,

j=

arr.length

i<j

i++){

obj[arr[i]]

=

true

}

return

obj

}

//

把这个对象转成数组

function

keys(obj){

var

arr

=

[]

//

私有对象

for(var

attr

in

obj){

if(obj.hasOwnProperty(attr)){//YUI底层代码

arr.push(attr)

}

}

return

arr

}

//综合的方法

去掉数组中的重复项

function

uniq(newarr){

return

keys(toObject(newarr))

}

alert(uniq(arr))

希望本文所述对大家的javascript程序设计有所帮助。

很简单啊,就像排序一样,只要简单修改一下就可以了,以下是我自己在写动态顺序表时写的一个过滤表中重复数值(原理和STL中的向量一样,使用的是动态数组为基础,加了模板技术,C++的)当然也可以自动增长数组和减少数组。 如果要看全部数据结构的代码就进我文库:

http://wenku.baidu.com/view/e42740dc195f312b3169a543.html

这只是其中的一个函数,没有进行修改的,所以里面有些对象是定义在类中的,但原理是一样的,一看就明白。

template<class Tey>

bool Sequence<Tey>::Filter()//过滤表中重复数据

{

if(length==0)//判断表是否为空

return false

int Mark=0

for(int i=0i<length-1i++)

{

Tey m=phod[i]//将要比较的数据保存至变量m

for(int n=i+1n<lengthn++)

{

if(phod[n]==m) //查找是否有重复数据,如果有就删除

{

for(int j=nj<lengthj++)

phod[j]=phod[j+1]

length--//删除一个就减少一个元素值

n-- //每一次删除后,需要保持下标不动,以免漏掉数据

Mark=1 //表进行了过滤 *** 作就修改标志

}

}

}

if((length+lon)<=Total)//判断删除元素后,表中空元素是否达到减少表长的条件。

if(!Reduction()) //即如果空元素大于或等于10就对表缩短

return false //缩短表长调用的Reduction()函数

if(Mark>0) //如果进行了删除 *** 作就返回真,否则返回假

return true

else

return false

}

计数方法,你在遍历数组外边int 一个数=0,如果某个数和数组【i】相等,就++

删除方法我用的是笨方法,因为数组不能直接增删 *** 作,要先算出新数组的长度,在遍历出去,我是取巧了先排序了,当然你也可以用其他排序方法排序

public static void main(String[] args) {

int [] arr={1,2,2,3,4,5}

int len=arr.length

Arrays.sort(arr)

int leng=0

for( int i=0i<arr.length-1i++){

if(arr[i]!=arr[i+1]){

leng++

}

}

if(arr[arr.length-2]!=arr[arr.length-1]){

leng++

}

System.out.println(leng)

int newlength=0

int []newArr=new int[leng]

for( int i=0i<arr.length-1i++){

if(arr[i]!=arr[i+1]){

newArr[newlength]=arr[i]

newlength++

}

}

if(arr[arr.length-2]!=arr[arr.length-1]){

newArr[newlength]=arr[arr.length-1]

}

for(int i=0i<newArr.lengthi++){

System.out.println(newArr[i])

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10062663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存