咖啡伴侣

呆在上海
posts - 163, comments - 156, trackbacks - 0, articles - 2

JS Map 总结

Posted on 2009-06-18 16:12 oathleo 阅读(7757) 评论(3)  编辑  收藏 所属分类: Web
js 里 Object本身可以做为Map。
条件是Key只能是String

如果要用对象做为Key,这个Map可以来实现。
效率上由于_getIndex方法每次都要遍历,耗时很长,所以通常在1:10左右

总结以上,如果Map的Key是String,最好还是用Object来实现。
而且用in来遍历Map,效率上不是网上说的那么差,和for()差不多

TWaver.Map = function(){
    this._entrys = null;
    this.initialize.apply(this, arguments);
}

TWaver.Map.prototype = {
    initialize: function(){
        this._entrys = new Array();
    },
    put: function(key, value){
        if (key == null || key == undefined) {
            return;
        }
        var index = this._getIndex(key);
        if (index == -1) {
            var entry = new Object();
            entry.key = key;
            entry.value = value;
            this._entrys[this._entrys.length] = entry;
        }else{
            this._entrys[index].value = value;
        }       
    },
    get: function(key){
        var index = this._getIndex(key);
        return (index != -1) ? this._entrys[index].value : null;
    },
    remove: function(key){
        var index = this._getIndex(key);
        if (index != -1) {
            this._entrys.splice(index, 1);
        }
    },
    clear: function(){
        this._entrys.length = 0;;
    },
    contains: function(key){
        var index = this._getIndex(key);
        return (index != -1) ? true : false;
    },
    getCount: function(){
        return this._entrys.length;
    },
    getEntrys: function(){
        return this._entrys;
    },
    _getIndex: function(key){
        if (key == null || key == undefined) {
            return -1;
        }
        var _length = this._entrys.length;
        for (var i = 0; i < _length; i++) {
            var entry = this._entrys[i];
            if (entry == null || entry == undefined) {
                continue;
            }
            if (entry.key === key) {//equal
                return i;
            }
        }
        return -1;
    }
}


Feedback

# re: JS Map 总结  回复  更多评论   

2009-06-19 12:24 by 找个美女做老婆
这个还是第一次听说,KEY 是STRING的时候,为什么要用OBJECT呢?那如果不是STRING,效率有怎么样呢?

Java乐园 技术交流社区:http://www.javaly.cn
Java乐园 群号:15651281
验证消息 : Java乐园

# re: JS Map 总结[未登录]  回复  更多评论   

2009-06-19 14:43 by King
汗,js需要map吗?不用这么复杂吧

# re: JS Map 总结  回复  更多评论   

2009-06-22 10:12 by oathleo
如果是自定义对象做Key,Object put进去 Key自动变成String。
好像也没有找到更好的办法,有谁有更好的办法?
(限制纯js)

只有注册用户登录后才能发表评论。


网站导航: