扩展自己的数组核心库

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
    <!--引入东师理想JS框架基础核心库-->
    <script src="dsFrameWork_Core.js"></script>
</head>
<body>

</body>

<script>
$(function()
{
    var ds = [
    {"chat_id":"1111","chat_name":"1111","chat_type":"2"},
    {"chat_id":"2222","chat_name":"2222","chat_type":"2"},
    {"chat_id":"3333","chat_name":"3333","chat_type":"3"},
    {"chat_id":"4444","chat_name":"4444","chat_type":"3"},
    {"chat_id":"5555","chat_name":"5555","chat_type":"3"}];

    var map1 = new ds_Array(ds,"chat_id");
    //返回指定关键词相应的对象
    var o=map1.getObject("5555");
    //map1.changeTop("400329");
    //console.log(obj2Str(ds));
    //map1.changeBottom("400329");
    console.log(obj2Str(ds));
    map1.changePostion("2222","1111","before");
    console.log(obj2Str(ds));
    map1.changePostion("2222","5555","after");
    console.log(obj2Str(ds));
});
</script>
</html>

dsFrameWork_Core.js

/*
 * MAP对象,实现MAP功能
 *
 * 接口:
 * size()     获取MAP元素个数
 * isEmpty()    判断MAP是否为空
 * clear()     删除MAP所有元素
 * put(key, value)   向MAP中增加元素(key, value)
 * remove(key)    删除指定KEY的元素,成功返回True,失败返回False
 * get(key)    获取指定KEY的元素值VALUE,失败返回NULL
 * element(index)   获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
 * containsKey(key)  判断MAP中是否含有指定KEY的元素
 * containsValue(value) 判断MAP中是否含有指定VALUE的元素
 * values()    获取MAP中所有VALUE的数组(ARRAY)
 * keys()     获取MAP中所有KEY的数组(ARRAY)
 *
 * 例子:
 * var map = new Map();
 *
 * map.put("key", "value");
 * var val = map.get("key")
 * ……
 *
 */
function Map() {
    this.elements = new Array();     

    //获取MAP元素个数
    this.size = function() {
        return this.elements.length;
    }     

    //判断MAP是否为空
    this.isEmpty = function() {
        return(this.elements.length < 1);
    }     

    //删除MAP所有元素
    this.clear = function() {
        this.elements = new Array();
    }     

    //向MAP中增加元素(key, value)
    this.put = function(_key, _value) {
        this.elements.push( {
            key : _key,
            value : _value
        });
    }     

    //删除指定KEY的元素,成功返回True,失败返回False
    this.remove = function(_key) {
        var bln = false;
        try{
            for(i = 0; i < this.elements.length; i++) {
                if(this.elements[i].key == _key) {
                    this.elements.splice(i, 1);
                    return true;
                }
            }
        } catch(e) {
            bln = false;
        }
        return bln;
    }     

    //获取指定KEY的元素值VALUE,失败返回NULL
    this.get = function(_key) {
        try{
            for(i = 0; i < this.elements.length; i++) {
                if(this.elements[i].key == _key) {
                    return this.elements[i].value;
                }
            }
        } catch(e) {
            return null;
        }
    }     

    //获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
    this.element = function(_index) {
        if(_index < 0 || _index >= this.elements.length) {
            return null;
        }
        return this.elements[_index];
    }     

    //判断MAP中是否含有指定KEY的元素
    this.containsKey = function(_key) {
        varbln = false;
        try{
            for(i = 0; i < this.elements.length; i++) {
                if(this.elements[i].key == _key) {
                    bln = true;
                }
            }
        } catch(e) {
            bln = false;
        }
        return bln;
    }     

    //判断MAP中是否含有指定VALUE的元素
    this.containsValue = function(_value) {
        var bln = false;
        try{
            for(i = 0; i < this.elements.length; i++) {
                if(this.elements[i].value == _value) {
                    bln = true;
                }
            }
        } catch(e) {
            bln = false;
        }
        return bln;
    }     

    //获取MAP中所有VALUE的数组(ARRAY)
    this.values = function() {
        var arr = new Array();
        for(i = 0; i < this.elements.length; i++) {
            arr.push(this.elements[i].value);
        }
        return arr;
    }     

    //获取MAP中所有KEY的数组(ARRAY)
    this.keys = function() {
        var arr = new Array();
        for(i = 0; i < this.elements.length; i++) {
            arr.push(this.elements[i].key);
        }
        return arr;
    }
}   

function obj2Str(obj)
{
switch(typeof(obj)){
   case ‘object‘:
    var ret = [];
    if (obj instanceof Array){
     for (var i = 0, len = obj.length; i < len; i++){
      ret.push(obj2Str(obj[i]));
     }
     return ‘[‘ + ret.join(‘,‘) + ‘]‘;
    }
    else if (obj instanceof RegExp){
     return obj.toString();
    }
    else{
     for (var a in obj){
      ret.push(a + ‘:‘ + obj2Str(obj[a]));
     }
     return ‘{‘ + ret.join(‘,‘) + ‘}‘;
    }
   case ‘function‘:
    return ‘function() {}‘;
   case ‘number‘:
    return obj.toString();
   case ‘string‘:
    return "\"" + obj.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function(a) {return ("\n"==a)?"\\n":("\r"==a)?"\\r":("\t"==a)?"\\t":"";}) + "\"";
   case ‘boolean‘:
    return obj.toString();
   default:
    return obj.toString();
}
}
/*************************************************************************************************************/
/*
功能:扩展的东师理想自己的Map类型,传入一个JSON数据,和一个KEY字段,
      在内存中生成两个Map对象,一个可以通过Key返回索引号,另一个可以通过Key返回实体对象
作者:黄海
时间:2014-07-31

用例:
var ds = [
    {"chat_id":"1111","chat_name":"1111","chat_type":"2"},
    {"chat_id":"2222","chat_name":"2222","chat_type":"2"},
    {"chat_id":"3333","chat_name":"3333","chat_type":"3"},
    {"chat_id":"4444","chat_name":"4444","chat_type":"3"},
    {"chat_id":"5555","chat_name":"5555","chat_type":"3"}];

    var map1 = new ds_Array(ds,"chat_id");
    //返回指定关键词相应的对象
    var o=map1.getObject("5555");
    map1.changeTop("400329");
    map1.changeBottom("400329");
    map1.changePostion("2222","1111","before");
    map1.changePostion("2222","1111","after");

*/
function ds_Array(json,key_field)
{
    var Key_map,Object_map;
    var init=function()
    {
        Key_map = new Map();
        Object_map = new Map();    

        $.each(json,function(i,n)
        {
            var o=eval(‘n.‘+key_field);
            Key_map.put(o,i);
            Object_map.put(o,n);
        });
    }

    init();    

    this.getObject = function(_key)
    {
        return Object_map.get(_key);
    }

    this.changePostion  = function(_key1,_key2,_dir)
    {
        var myIndex1,myObject1,myIndex2;
        switch(_dir)
        {
            case "after"://_dir:1 _key1向_key2 后
                myIndex1=Key_map.get(_key1);
                myObject1=Object_map.get(_key1);
                myIndex2=Key_map.get(_key2);
                if(myIndex1>myIndex2)
                {
                    json.splice(myIndex1,1);
                    json.splice(myIndex2,0,myObject1);
                }
                else
                {
                    json.splice(myIndex2+1,0,myObject1);
                    json.splice(myIndex1,1);
                }
                break;        

            case "before"://_dir:2 _key1向_key2 前
                myIndex1=Key_map.get(_key1);
                myObject1=Object_map.get(_key1);
                myIndex2=Key_map.get(_key2);
                if(myIndex2>myIndex1)
                {
                    json.splice(myIndex2,0,myObject1);
                    json.splice(myIndex1,1);
                }
                else
                {
                    json.splice(myIndex1,1);
                    json.splice(myIndex2,0,myObject1);
                }
                break;
        }
        init();
    }

    this.changeTop  =  function(_key)
    {
        //将_key1放到顶部
        var myIndex=Key_map.get(_key);
        var myObject=Object_map.get(_key);

        //删除指定索引的对象
        json.splice(myIndex,1);
        //放到第一个上
        json.unshift(myObject);
        init();
    }

    this.changeBottom=function(_key)
    {
        //将_key1放到底部
        var myIndex=Key_map.get(_key);
        var myObject=Object_map.get(_key);

        //删除指定索引的对象
        json.splice(myIndex,1);
        //放到最后一个上
        json.push(myObject);
        init();
    }
}

扩展自己的数组核心库

时间: 2024-10-16 05:49:18

扩展自己的数组核心库的相关文章

使用prototype扩展的JavaScript常用函数库

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 /** * 检索数组元素(原型扩展或重载) * @param {o} 被检索的元素值 * @type int * @returns 元素索引 */ Array.prototype.contains = function(o) { var index = -1; for(var i=0;i<thi

Java核心库实现AOP过程

这篇文章是关于Java的一个疑难杂症,通过利用Java核心库实现简单的AOP方法,并把实例代码做了分析对照,以下是全部内容: Spring是一个十分火热开源框架,而AOP(面向切面编程)则是Spring最重要的概念之一,为了更好的理解和学习AOP的思想,使用核心库来实现一次不失为一个好方法. 首先介绍一下AOP的概念,AOP(Aspect Oriented Programming),即面向切面编程,所谓的面向切面编程,就是从一个横切面的角度去设计代码的思想,传统的OOP思想是用封装继承和多态构造

【DRP】-JSTL核心库 c:out标签

1.引入jar包 index页面:作用点击连接调用页面 <a href="servlet/JstlCoreServlet">测试JSTL核心库</a><br> JstlCoreServlet类,作用:存储数据,转发页面! package com.bjpowernode.jstl; import java.io.IOException; import javax.servlet.ServletException; import javax.servle

Swift 正式开源, 包括 Swift 核心库和包管理器

Swift 正式开源!Swift 团队很高兴宣布 Swift 开始开源新篇章.自从苹果发布 Swfit 编程语言,就成为了历史上发展最快的编程语言之一.Swift 通过设计使得软件编写更加快速更加安全. Swift 的 GitHub 地址:https://github.com/apple/swift Swift 是由多种不同的项目组成的,提供一个构建软件的完整生态系统.Swift 编译器项目解析 Swift 语法,产生语义判断来帮助编写正确代码,利用 LLVM 生成机器指令.LLDB 项目是 f

[翻译] Swift Core Libraries / Swift核心库

原文: Swift Core Libraries Swift核心库 Swift核心库项目提供相较于标准库更加表层的功能, 这些库提供在所有Swift平台上都可以使用的强大工具. 核心库旨在在以下重要方面提供稳定且实用的功能. 常用的类型, 包括 数据(data), URL, 字符集(character sets)与 specialized collections 单元测试 Networking primitives Scheduling and execution of work, 包括 多线程

22 扩展Python - 《Python 核心编程》

?? 引言/动机 ?? 扩展 Python ?? 创建应用程序代码 ?? 用样板包装你的代码 ?? 编译 ?? 导入并测试 ?? 引用计数 ?? 线程和 GIL ?? 相关话题 22.1 介绍/动机 什么是扩展 一般来说,所有能被整合或导入到其它python 脚本的代码,都可以被称为扩展.您可以用纯 Python 来写扩展,也可以用C 和C++之类的编译型的语言来写扩展(或者也可以用Java 给Jython 写 扩展,也可以用C#或Visual Basic.NET 给IronPython 写扩展

Array数组标准库

概述 Array是JavaScript的内置对象,同时也是一个构造函数,可以用它生成新的数组. 作为构造函数时,Array可以接受参数,但是不同的参数,会使得Array产生不同的行为. 无参数时,返回一个空数组: 如果使用一个正整数作为参数,则这个正整数表示新数组的长度: 如果使用非数值(字符串.布尔值.对象等)作为参数,则该值是新数组的成员: 如果参数在一个以上,则这些参数都是新数组的成员. var a1 = new Array(); var a2 = new Array(1); var a3

OYMLCN.WeChat.Core微信公众平台SDK核心库(被动回复模块)现已基本完成

NuGet包地址: https://www.nuget.org/packages/OYMLCN.WeChat.Core 由于来的OYMLCN.WeChat存在深度封装,并没有做完整的测试,对于使用不友好,现已重新构建SDK的接收消息被动回复模块. 现已做到最大程度的简易化及模块化,每个模块都已完成单元测试(根据微信说明文档的示例内容). 接下来将会重新构建微信接口的调用模块,将会在基本完成后发布. 类JQuery操作的方式将会在所有功能完善并完成测试以后再整合到OYMLCN.WeChat当中.

编译cling核心库的方法

1,安装jdk, 去甲骨文网站下载jdk1.7.0_71.tar.gz 展开到/opt目录下 2,安装git-core sudo apt-get install git-core 3,安装maven 下载链接:http://maven.apache.org/download.cgi 下载apache-maven-3.3.1-bin.tar.gz 展开到/usr/local下 4,配置路径 修改/etc/profile文件(sudo gedit /etc/profile),添加 JAVA_HOME