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])
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)