четвер, 1 липня 2010 р.

Понадобилось мне привязать функции к разным конструкторам, а чтобы избежать можификации обектов понадобились словари. Вот мой вариант словарей:

function Dict(def){
var data=[];
var default_val=def;
var dict;
function find(key){
for(var i=0;i<data.length;i++)
if(data[i].key===key)
return i;
return -1;
}
function add(key,value){
data.push({key:key,value:value});
dict.length=data.length;
}
dict=function(key,value){
var i=find(key);
if(typeof value=='undefined')
return (i==-1)?default_val:data[i].value;
if(i==-1)add(key,value);
else data[i].value=value;
return dict;
}
dict.del=function(key){
var i=find(key);
if(i!=-1)data.splice(i,1);
dict.length=data.length;
return dict;
};
dict.forEach=function(callback){
for(var i=0;i<data.length;i++)
callback(data[i].key,data[i].value);
return dict;
};
dict.filter=function(callback){
var res=Dict();
dict.forEach(function(k,v)if(callback(k,v))res(k,v));
return res;
};
dict.copy=function()dict.filter(function()true);
dict.clear=function(){data=[];dict.length=0;};
dict.size=function(){return data.length};
dict.get=function(key,def){
var i=find(key);
return (i==-1)?def:data[i].value;
}
return dict;
};

Немає коментарів:

Дописати коментар