logo
  • 主页
  • 文档
  • 示例

    API

  • .sql({
    • select:{
      • col: ..,
      • sum: ..,
      • avg: ..,
      • count: ..,
      • max: ..,
      • min: ..
      },
    • from: ..,
    • where: ..,
    • groupBy: ..,
    • having: ..,
    • orderBy: ..,
    • limit: ..
    });
  • .tree(data,option)
  • .keyArray(data,["key"])
  • .keyBreak(data,option)
  • .unique(data)
  • .spaceFix(data,option)
  • .extend(data,option)
  • .groupBy(data,iteratee)
  • .where(data,iteratee)
  • .orderBy(data,iteratee)
  • .limit(data,option)
  • .max(data,iteratee)
  • .min(data,iteratee)
  • .map(data,iteratee)
  • .forIn(data,iteratee)
  • 类型判断相关
  • .sql

    jc.sql(data, query); 第一个参数是[obj,obj,obj]形式的数据, query:数据处理逻辑对象。可以使用类似数据库SQL单表查询的API逻辑,处理复杂数据逻辑计算。

    query对象执行顺序:

    1.from

    2.where

    3.groupBy

    4.having

    5.select

    6.orderBy

    7.limit

    并强制不要求书写代码顺序,但执行顺序会按照以上列表

    orderBy使用的字段是select之后的字段, 因为select之后字段可能发生改变了。

                
                  // 模拟数据:模拟国庆7天深圳广州人流量数据,下面所有代码示例都将
                  // sql方法都使用该模拟数据,不再一一列出,我知道这样不好,允许我偷个懒,闲了再优化。
                  var table = [
                  {time:"10月1日", inPerson:20, outPerson:1000, region: "广州",fly:12},
                  {time:"10月1日", inPerson:13, outPerson:900, region: "深圳",fly:2},
                  {time:"10月2日", inPerson:15, outPerson:900, region: "广州",fly:null},
                  {time:"10月2日", inPerson:15, outPerson:1000, region: "深圳",fly:0},
                  {time:"10月2日", inPerson:15, outPerson:1000, region: "深圳"},
                  {time:"10月3日", inPerson:15, outPerson:100, region: "广州"},
                  {time:"10月3日", inPerson:15, outPerson:100, region: "深圳"},
                  {time:"10月4日", inPerson:90, outPerson:60, region: "广州"},
                  {time:"10月4日", inPerson:70, outPerson:50, region: "深圳"},
                  {time:"10月5日", inPerson:500, outPerson:39, region: "广州"},
                  {time:"10月5日", inPerson:350, outPerson:30, region: "深圳"},
                  {time:"10月6日", inPerson:900, outPerson:15, region: "广州"},
                  {time:"10月6日", inPerson:1000, outPerson:15, region: "深圳"},
                  {time:"10月7日", inPerson:900, outPerson:10, region: "广州"},
                  {time:"10月7日", inPerson:1200, outPerson:7, region: "深圳"}
                  ]
                
              
  • .query.select

    jc.sql(query) 中 query配置对象中的select, 用于对数据进行操作。

    select包含对象:

    1.col, 选择或操作列

    2.sum, 取和计算

    3.avg, 取平均计算

    4.conut, 计数运算

    5.max, 取最大值运算

    6.min, 取最小值运算

  • .query.select.col

    jc.sql(query) 中 query.select配置对象中的col, 用于对数据进行选择列操作,类型:string|array|obj。

    string和array类型下会自动在原有列的名称前面添加"col_"作为新的一列。obj类型的键为自定义列的名称,val为string|function(row){}, string为要选择的列,function回调值为源数据的行。

    缺失的数据会以underfined存在。

                
                  // 其他用法可以参考sum方法,不一一列举
                  var col1 = jc.sql({
                    select: {
                      col: ["inPerson","outPerson","fly"]
                    },
                    from: table // 文档jc.sql给出了模拟数据
                  });
                  console.log(JSON.stringify(col1));
                  // output:[
                  // {"inPerson":20,"outPerson":1000,"fly":12},
                  // {"inPerson":13,"outPerson":900,"fly":2},
                  // {"inPerson":15,"outPerson":900,"fly":null},
                  // {"inPerson":15,"outPerson":1000,"fly":0},
                  // {"inPerson":15,"outPerson":100, fly: undefined},
                  // {"inPerson":15,"outPerson":100, fly: undefined},
                  // {"inPerson":90,"outPerson":60, fly: undefined},
                  // {"inPerson":70,"outPerson":50, fly: undefined},
                  // {"inPerson":500,"outPerson":39, fly: undefined},
                  // {"inPerson":350,"outPerson":30, fly: undefined},
                  // {"inPerson":900,"outPerson":15, fly: undefined},
                  // {"inPerson":1000,"outPerson":15, fly: undefined},
                  // {"inPerson":900,"outPerson":10, fly: undefined},
                  // {"inPerson":1200,"outPerson":7, fly: undefined}
                  // ]
                
              
  • .query.select.sum

    jc.sql(query) 中 query.select配置对象中的sum, 用于对数据进行加法操作,类型:string|array|obj。

    string和array类型下会自动在原有列的名称前面添加"sum_"作为新的一列。obj类型的键为自定义列的名称,val为string|function(row){}, string为要选择的列,function回调值为源数据的行。

                  
                    // sum:"String"用法
                    var sum1 = jc.sql({
                      select: {
                        sum: "inPerson"
                      },
                      from: table  // 文档jc.sql给出了模拟数据
                    })
                    console.log(sum1)
                    // output: {sum_inPerson: 5103}
                    
                    // sum:[array]用法
                    var sum2 = jc.sql({
                      select: {
                        sum: ["inPerson","outPerson"]
                      },
                      from: table
                    });
                    console.log(sum2);
                    // output:[{sum_inPerson: 5103, sum_outPerson: 4226}]
                    
                    // sum:{obj}用法
                    var sum3 = jc.sql({
                      select: {
                        sum: {
                          "inPerson": function (row) {
                            return row.inPerson
                          },
                          "outPerson": "outPerson",
                          "流动人口总和": function (row) {
                            return row.inPerson + row.outPerson;
                          }
                        }
                      },
                      from: table
                    });
                    console.log(sum3);
                    // output:[{inPerson: 5103, outPerson: 4226, 流动人口总和: 9329}]
                
              
  • .query.select.avg

    jc.sql(query) 中 query.select配置对象中的avg, 用于对数据进行平均操作,类型:string|array|obj。

    string和array类型下会自动在原有列的名称前面添加"avg_"作为新的一列。obj类型的键为自定义列的名称,val为string|function(row){}, string为要选择的列,function回调值为源数据的行。

    不会把undefined, null, false的值当做0来算平均, 这点遵循了数据库的计算规则。

                
                  // 主要展示avg的null值的情况下avg的计算情况,其他使用规则参考sum方法的例子
                  var avg1 = jc.sql({
                    select: {
                      avg: ["inPerson","outPerson","fly"],
                    },
                    from: table
                  });
                  console.log(avg1);
                  // output:[{avg_inPerson: 364.5, avg_outPerson: 301.85714285714283, avg_fly: 4.666666666666667}]
                
              
  • .query.select.max

    jc.sql(query) 中 query.select配置对象中的max, 用于对数据进行取最大值操作,类型:string|array|obj。

    string和array类型下会自动在原有列的名称前面添加"max_"作为新的一列。obj类型的键为自定义列的名称,val为string|function(row){}, string为要选择的列,function回调参数为源数据的行。

                
                var data = jc.sql({
                  select: {
                    max: {
                      fly: "fly",
                      in: function (row) {
                          return row.inPerson
                      }
                    }
                  },
                  from: table
                });
                // output: [{ "fly": 12, in: 1200 }];
                
              
  • .query.select.min

    jc.sql(query) 中 query.select配置对象中的min, 用于对数据进行去最小值操作,类型:string|array|obj。

    string和array类型下会自动在原有列的名称前面添加"min_"作为新的一列。obj类型的键为自定义列的名称,val为string|function(row){}, string为要选择的列,function回调值为源数据的行。

                
                  // 其他用法可以参考sum。
                  var count = jc.sql({
                    select: {
                      min: {
                        fly: "fly",
                        in: function (row) {
                            return row.inPerson
                        }
                      }
                    },
                    from: table
                  });
                  console.log(count);
                  // output:[{"count_inPerson":14,"count_outPerson":14,"count_fly":3}]
                
              
  • .query.select.count

    jc.sql(query) 中 query.select配置对象中的count, 用于对数据进行计数操作,类型:string|array|obj。

    string和array类型下会自动在原有列的名称前面添加"count_"作为新的一列。obj类型的键为自定义列的名称,val为string|function(row){}, string为要选择的列,function回调值为源数据的行。

    count(*)计算行的个数,count(col)计算存在的除了undefined和null以外的col的个数count(*)计算行的个数,count(col)计算存在的除了undefined和null以外的col的个数,和数据库SQL逻辑一直

                
                  // 其他用法可以参考sum。
                  var count = jc.sql({
                    select: {
                      count: ["inPerson","outPerson","fly"]
                    },
                    from: table
                  });
                  console.log(count);
                  // output:[{"count_inPerson":14,"count_outPerson":14,"count_fly":3}]
                
              
  • .query.from

    jc.sql(query) 中 query.from配置对象, 传入需要操作的数据, 类型:数组对象[obj,obj,...,obj]。

  • .query.where

    jc.sql(query) 中 query.where配置对象, 对传入数据进行过滤操作, 类型:obj|function。

    类型是obj的情况下,过滤出包含该对象的行。function回调参数为row,过滤出return值为true的行。

                
                  // where: {obj};
                  var data = jc.sql({
                    select: {
                        col: ["time", "inPerson"],
                    },
                    from: table,
                    where: {time: "10月1日"}
                  });
    
                  /* output: [
                    { time: "10月1日", inPerson: 20},
                    { time: "10月1日", inPerson: 13}
                  ] */
    
    
                  // where: function (row) { return true};
                  var data = jc.sql({
                    select: {
                        col: ["time", "inPerson"],
                    },
                    from: table,
                    where: function (row) {
                        return row.time == "10月1日" && row.inPerson < 15
                    }
                  });
    
                  /* output: [
                      { time: "10月1日", inPerson: 13 }
                  ] */
                
              
  • .query.groupBy

    jc.sql(query) 中 query.groupBy配置对象, 对传入数据进行分组操作, 类型:string|array|function。

    根据配置进行分组。function的返回值可以是String,Array。而Array的值可以是String, function(row){}

                
                  // groupBy: {obj};
                  var groupBy1 = jc.sql({
                    select: {
                      count: ["inPerson","outPerson","fly"]
                    },
                    from: table,
                    groupBy:"time"
                  });
                  console.log(groupBy1);
                  // output: [
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":2},
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":2},
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":0},
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":0},
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":0},
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":0},
                  // {"count_inPerson":2,"count_outPerson":2,"count_fly":0}
                  // ]
    
                  // groupBy: function (row) { return true};
                  var groupBy2 = jc.sql({
                    select: {
                      sum: "inPerson"
                    },
                    from: table,
                    groupBy: function (row) {
                      return row.time
                    }
                  });
                  console.log(groupBy2);
                  // output:[
                  // {"sum_inPerson":33},
                  // {"sum_inPerson":30},
                  // {"sum_inPerson":30},
                  // {"sum_inPerson":160},
                  // {"sum_inPerson":850},
                  // {"sum_inPerson":1900},
                  // {"sum_inPerson":2100}
                  // ]
    
                  // groupBy: ["string", function (row) {}];
                  var groupBy3 = jc.sql({
                    select: {
                      sum: "inPerson"
                    },
                    from: table,
                    groupBy: ["fly"]
                  });
                  console.log(groupBy3);
                  // output:[
                  // {"sum_inPerson":15},
                  // {"sum_inPerson":13},
                  // {"sum_inPerson":20},
                  // {"sum_inPerson":5055}
                  // ]
                
              
  • .query.having

    jc.sql(query) 中 query.having, 对分组进行多虑操作, 类型:obj。

    使用{sum_aa+bb:">10"}, 来限定分组中,过滤分组中所有键名为aa加bb之和大于10的。having对象的键第一部分为计算方式[sum,avg,max,min,conut]其中之一,后面接数学计算式子,用"_"分割开。having对象的值是判断条件。

    having多个键值对之间的关系是"且",对应数据库"and",暂时不支持"或"操作,对应数据库操作"or"。

                
                    // 广深总人口流动大于1000万的日期分析
                    var having1 = jc.sql({
                      select: {
                        col:{
                          "时间":"time"
                        },
                        sum: {
                          "inPerson":"inPerson",
                          "outPerson":"outPerson",
                          "allSum":function(row){
                            return row.inPerson + row.outPerson
                          }
                        },
                        avg: {
                          "流入人口平均数":"inPerson",
                          "流出人口平均数":"outPerson",
                          "流入流出人口平均数":function(row){
                            return row.inPerson + row.outPerson
                          }
                        }
                      },
                      from: table,
                      groupBy: "time",
                      having: {"sum_inPerson+outPerson":">1000"}
                    })
                    console.log(having1)
                    // 输出: [{"时间":"10月1日","inPerson":33,"outPerson":1900,"allSum":1933,"流入人口平均数":16.5,"流出人口平均数":950,"流入流出人口平均数":966.5},
                    // {"时间":"10月2日","inPerson":30,"outPerson":1900,"allSum":1930,"流入人口平均数":15,"流出人口平均数":950,"流入流出人口平均数":965},
                    // {"时间":"10月6日","inPerson":1900,"outPerson":30,"allSum":1930,"流入人口平均数":950,"流出人口平均数":15,"流入流出人口平均数":965},
                    // {"时间":"10月7日","inPerson":2100,"outPerson":17,"allSum":2117,"流入人口平均数":1050,"流出人口平均数":8.5,"流入流出人口平均数":1058.5}];
                
              
  • .query.orderBy

    jc.sql(query) 中 query.orderBy, 对数据进行排序操作, 类型:obj||function

    obj类型下可以这样使用{key:"desc"},desc代表降序(从大到小),asc代表升序(从小到大),大小写都可以,不支持混合大小写使用。那么将会数据中键为key的值进行排序。function类型下回调的函数的参数为(left, right)使用方法类似原生sort。

    obj类型下值不是"desc"或"DESC"都会被默认为"ASC",顺序。且对象类型下目前只能用于数字排序,汉字英文之类的排序请在function自由发挥。orderBy计算顺序在select之后,数据已经变成新构造的数据,那么操作数据的时候就要用新的键名

                
                    // 广深总人口流动大于1000万的日期分析
                    var orderBy = jc.sql({
                      select: {
                        col:{
                          "时间":"time"
                        },
                        sum: {
                          "inPerson":"inPerson",
                          "outPerson":"outPerson",
                          "allSum":function(row){
                            return row.inPerson + row.outPerson
                          }
                        },
                        avg: {
                          "流入人口平均数":"inPerson",
                          "流出人口平均数":"outPerson",
                          "流入流出人口平均数":function(row){
                            return row.inPerson + row.outPerson
                          }
                        }
                      },
                      from: table,
                      groupBy: "time",
                      having: {"sum_inPerson+outPerson":">1000"},
                      orderBy:function (left, right) {
                        return left["流入人口平均数"] < right["流入人口平均数"];
                      }
                    })
                    console.log(orderBy)
                    // 输出: [{"时间":"10月7日","inPerson":2100,"outPerson":17,"allSum":2117,"流入人口平均数":1050,"流出人口平均数":8.5,"流入流出人口平均数":1058.5},
                    // {"时间":"10月6日","inPerson":1900,"outPerson":30,"allSum":1930,"流入人口平均数":950,"流出人口平均数":15,"流入流出人口平均数":965},
                    // {"时间":"10月1日","inPerson":33,"outPerson":1900,"allSum":1933,"流入人口平均数":16.5,"流出人口平均数":950,"流入流出人口平均数":966.5},
                    // {"时间":"10月2日","inPerson":30,"outPerson":1900,"allSum":1930,"流入人口平均数":15,"流出人口平均数":950,"流入流出人口平均数":965}]
                
              
  • .query.limit

    jc.sql(query) 中 query.limit, 返回指定的记录数, 类型:number||array

    number类型下限制条数。array类型下有两个参数,如[1,2],第一个参数说明从下标1位置开始,第二个参数说明选择后面2条数据,用法类似MYSQL。

                
                  var data = jc.sql({
                    select: {
                        col: ["time", "inPerson"],
                    },
                    from: table,
                    limit: [1,2]
                  });
                  console.log(data);
                  // output:[ { time: "10月1日", inPerson: 13}, { time: "10月2日", inPerson: 15} ]
                
              
  • .tree

    jc.tree(table, option), 生成树结构json

    第一个参数是[obj,obj,obj]形式的数据,每行数据必须包括id(该行数据唯一识别号),parent(父节点的ID),使用tree必须要有一个确定的root(根节点ID),root根节点所在的行parent为null,root根节点也可以不必真实存在(如下例),但使用的时候还是要求用户自己知道根节点ID进行配置,不会自动发现。

    第二个参数是生成树配置项,root配置根节点ID,id为每行唯一识别号所在字段,parent为父节点所在字段。retain是可选配置的,配置保留的字段,支持strting,array,object三种类型,用法类似sql方法中的col,object模式下可以改名,可以使用function (row)的回调函数。

    该函数不认为环形的父子关系(如你孙子可能是你父亲)的json数据是错的,一样可以正常生成,因为这是你输入的。虽然我不知道这种数据有什么用,但我不敢说这样是错的,然后做容错处理。

                
                  var table = [
                      { id: 1, pid: 0, name: "china", value: 1231 },
                      { id: 2, pid: 1, name: "guangdong", value: 4321 },
                      { id: 3, pid: 2, name: "shenzhen", value: 461 },
                      { id: 4, pid: 2, name: "guangzhou", value: 512 },
                      { id: 5, pid: 0, name: "USA", value: 911 },
                      { id: 6, pid: 5, name: "AK", value: 654 }
                  ];
                  var data = jc.tree(table, {
                      root: 0,
                      id: "id",
                      parent: "pid",
                      retain: {
                          palce: "name",
                          value: function (row) {
                              return "$" + row.value
                          }
                      }
                  });
                  /* output: {
                      "children": [
                          {
                              "id": 1,
                              "pid": 0,
                              "palce": "china",
                              "value": "$1231",
                              "children": [
                                  {
                                      "id": 2,
                                      "pid": 1,
                                      "palce": "guangdong",
                                      "value": "$4321",
                                      "children": [
                                          {
                                              "id": 3,
                                              "pid": 2,
                                              "palce": "shenzhen",
                                              "value": "$461"
                                          },
                                          {
                                              "id": 4,
                                              "pid": 2,
                                              "palce": "guangzhou",
                                              "value": "$512"
                                          }
                                      ]
                                  }
                              ]
                          },
                          {
                              "id": 5,
                              "pid": 0,
                              "palce": "USA",
                              "value": "$911",
                              "children": [
                                  {
                                      "id": 6,
                                      "pid": 5,
                                      "palce": "AK",
                                      "value": "$654"
                                  }
                              ]
                          }
                      ]
                  } */
                
              
  • .keyArray

    jc.keyArry(table, [key, key]), 对数据降维收缩

    第一个参数是[obj,obj,obj]形式的数据,第二个参数是选择第一个参数数据某列数据进行转数组;

                
                  var table = [
                    { time: "10/1", mac: 10, win: 20 },
                    { time: "10/1", mac: 30, win: 20 },
                    { time: "10/1", mac: 45, win: 20 },
                    { time: "10/1", mac: 20, win: 20 }
                  ];
                  var data = jc.keyArray(table, ["time", "mac"]);
                  /* output:{
                    time: ["10/1", "10/1", "10/1", "10/1"],
                    mac: [10, 30, 45, 20]
                  }; */
                
              
  • .keyBreak

    jc.keyBreak(table, option), 拆分数据

    第一个参数是[obj,obj,obj]形式的数据,第二个参数是配置项,具体看下面代码注释

                
                  var table = [{ time: "10/1", mac: 10, win: 20 }];
                  var data = jc.keyBreak(table, {
                      break: ["mac", "win"], // 需要拆分的键名
                      key: "type",           // break的字段将会作为该字段的值
                      value: "value",        // break的字段对应值将会作为该字段的值
                      retain: ["time"]       // 拆分后保留的字段
                  });
                  console.log(data);
                  /* output:[
                      { time: "10/1", type: "mac", value: 10 },
                      { time: "10/1", type: "win", value: 20 }
                  ] */
                
              
  • .unique

    jc.unique(array), 去重

    参数是数组

                
                  var table = [
                      { number: 1, name: "Colin" },
                      { number: 1, name: "Colin" },
                      { number: 2, name: "Colin" },
                      { number: 3, name: "Mr Chen" },
                      { number: 3, name: "Mr Chen" }
                  ]
                  var data = jc.unique(table);
                  console.log(data);
                  /* output:[
                      { number: 1, name: "Colin" },
                      { number: 2, name: "Colin" },
                      { number: 3, name: "Mr Chen" }
                  ] */
                
              
  • .spaceFix

    jc.spaceFix(data, option), 补全数据间隔

    第一个参数是[obj,obj,obj]形式的数据,第二个参数是配置项,具体看下面代码注释

                
                var time = [
                    { TIME: 1514736000, IN: 10, OUT: 10 }, // 时间戳是 2018年1月1日
                    { TIME: 1514822400, IN: 20, OUT: 20 }, // 时间戳是 2018年1月2日
                    { TIME: 1514908800, IN: 30, OUT: 30 }, // 时间戳是 2018年1月3日
                    { TIME: 1515254400, IN: 20, OUT: 40 }, // 时间戳是 2018年1月7日
                    { TIME: 1515340800, IN: 30, OUT: 50 }, // 时间戳是 2018年1月8日
                    { TIME: 1515600000, IN: 40, OUT: 60 }  // 时间戳是 2018年1月11日
                ];
                var fix = jc.spaceFix(time, {
                    key: "TIME",            // 补全依据的字段
                    start: 1514649600,      // 补全的开始点 时间戳是 2017年12月31日
                    end: 1515686400,        // 补全的结束点 时间戳是 2018年1月12日
                    space: 86400,           // 补全的间隔   86400代表一天
                    zeroFill: ["IN", "OUT"] // 需要补全的字段,补0
                });
                console.log(fix)
                /* output: [
                    { TIME: 1514649600, IN: 0, OUT: 0 },
                    { TIME: 1514736000, IN: 10, OUT: 10 },
                    { TIME: 1514822400, IN: 20, OUT: 20 },
                    { TIME: 1514908800, IN: 30, OUT: 30 },
                    { TIME: 1514995200, IN: 0, OUT: 0 },
                    { TIME: 1515081600, IN: 0, OUT: 0 },
                    { TIME: 1515168000, IN: 0, OUT: 0 },
                    { TIME: 1515254400, IN: 20, OUT: 40 },
                    { TIME: 1515340800, IN: 30, OUT: 50 },
                    { TIME: 1515427200, IN: 0, OUT: 0 },
                    { TIME: 1515513600, IN: 0, OUT: 0 },
                    { TIME: 1515600000, IN: 40, OUT: 60 },
                    { TIME: 1515686400, IN: 0, OUT: 0 }
                ] */
                
              
  • .extend

    jc.extend(type,target,object), 复制/合并。type是布尔类型,true为深度复制/合并,参数可忽略。target是目标对象,其他对象的成员属性将被附加到该对象上。object是被合并对象

    该方法作者偷懒基本搬了jquery的extend方法过来,所以使用方法和jquery一样,搜索引擎可以查到。

                
                  var obj = {
                      title: "for test",
                      array: ["name", {
                          name: "extend"
                      }],
                      obj: {
                          name: "obj-test",
                          other: "other"
                      }
                  }
                  // 如果参入参数前面加true就会变成深度合并
                  var data = jc.extend(obj, {
                      title: "success",
                      array: [123],
                      obj: {
                          name: "success"
                      },
                      fn: function (params) {
                          return params
                      }
                  });
                  console.log(data);
                  /* output:{
                      title: "success",
                      array: [123],
                      obj: {
                          name: "success"
                      },
                      fn: function (params) {
                          return params
                      }
                  } */
                
              
  • .groupBy

    jc.groupBy(table, iteratee), 对数据进行分组操作, 也可以写作jc.group, iteratee的类型:string || array || function

    第一个参数是[obj,obj,obj]形式的数据,第二个参数可以是string || array || function, function类型下回调参数是每一行的对象;array类型下可以根据多个键进行分组,function类型下return一个数组有同样效果

                
                  var data = [
                      { name: "apple", sell: 15, week: 2 },
                      { name: "apple", sell: 5, week: 3 },
                      { name: "apple", sell: 13, week: 4 },
                      { name: "apple", sell: 3, week: 5 },
                      { name: "banana", sell: 4, week: 2 },
                      { name: "banana", sell: 5, week: 3 },
                      { name: "banana", sell: 2, week: 4 },
                      { name: "banana", sell: 2, week: 5 }
                  ];
    
                  var group = jc.groupBy(data, "name");
                  var group = jc.groupBy(data, ["name"]);
                  var group = jc.groupBy(data, function (row) {
                    return row.name
                  });
                  console.log(group);
                  /* same output: {
                      apple:[
                          { name: "apple", sell: 15, week: 2 },
                          { name: "apple", sell: 5, week: 3 },
                          { name: "apple", sell: 13, week: 4 },
                          { name: "apple", sell: 3, week: 5 },
                      ],
                      banana:[
                          { name: "banana", sell: 4, week: 2 },
                          { name: "banana", sell: 5, week: 3 },
                          { name: "banana", sell: 2, week: 4 },
                          { name: "banana", sell: 2, week: 5 }
                      ]
                  } */
                
              
  • .where

    jc.where(table, iteratee), 进行过滤操作,iteratee的类型: object || function

    第一个参数是[obj,obj,obj]形式的数据。 第二个参数可以是obj || function,function类型下回调参数是每一行的对象, 过滤出return 为true的数据;object类型使用{key1:"value1",key2:"value2"}的形式配置,过滤出包含该object的行

                
                  var table = [
                    { time: "10/1", mac: 10, win: 20 },
                    { time: "10/1", mac: 30, win: 20 },
                    { time: "10/1", mac: 45, win: 20 },
                    { time: "10/2", mac: 30, win: 3 }
                  ];
                  var data = jc.where(table, { mac: 30 });
                  console.log(data)
                   /* same output:[
                    { time: "10/1", mac: 30, win: 20 },
                    { time: "10/2", mac: 30, win: 3 }
                   ] */
    
                  var data = jc.where(table, function(row) {
                      return row.time == "10/2" && row.mac == 30
                  });
                   console.log(data)
                   /* output:[
                    { time: "10/2", mac: 30, win: 3 }
                   ] */
                
              
  • .orderBy

    jc.orderBy(data, iteratee), 进行排序操作,, 也可以写作jc.order。iteratee的类型: object || function

    第一个参数是[obj,obj,obj]形式的数据。 第二个参数可以是obj || function,function类型下回调参数是left,right, 使用方式和原生js的sort一直;object类型使用{key1:"ASC",key2:"DESC"}的形式配置,desc代表降序(从大到小),asc代表升序(从小到大),大小写都可以,不支持混合大小写使用

                
                  var table = [
                      { TIME: 1, IN: 10, OUT: 10 },
                      { TIME: 2, IN: 20, OUT: 20 },
                      { TIME: 3, IN: 30, OUT: 30 },
                      { TIME: 4, IN: 30, OUT: 40 }
                  ];
                  var order = jc.orderBy(table, {IN:"DESC", OUT:"ASC"});
                  console.log(order)
                  /* output: [
                      { TIME: 3, IN: 30, OUT: 30 },
                      { TIME: 4, IN: 30, OUT: 40 },
                      { TIME: 2, IN: 20, OUT: 20 },
                      { TIME: 1, IN: 10, OUT: 10 }
                  ] */
                
              
  • .limit

    jc.limit(data, iteratee), 返回指定的记录数, iteratee类型:number||array

    number类型下限制条数。array类型下有两个参数,如[1,2],第一个参数说明从下标1位置开始,第二个参数说明选择后面2条数据,用法类似MYSQL。

                
                  var data = [
                      { TIME: 1, IN: 10, OUT: 10 },
                      { TIME: 2, IN: 20, OUT: 20 },
                      { TIME: 3, IN: 30, OUT: 30 },
                      { TIME: 7, IN: 20, OUT: 40 },
                      { TIME: 8, IN: 30, OUT: 50 },
                      { TIME: 11, IN: 40, OUT: 60 }
                  ];
                  var limit = jc.limit(data, 2);
                  console.log(limit)
                   /* output: [
                      { TIME: 1, IN: 10, OUT: 10 },
                      { TIME: 2, IN: 20, OUT: 20 }
                  ]) */
                
              
  • .max

    jc.max(data, iteratee), 返回匹配到最大值所在的行, iteratee, 可选, 类型:string||function

    string为要选择的列,function回调参数为源数据的行。该函数主要暂时用于补充jc.sql无法根据某字段最大值选择其他字段(如:某峰值发生的时间),不过已经纳入规划。

                
                  var table = [5, NaN, undefined, null, 1]
                  var data = jc.max(table);
                  console.log(data)
                  // output: 5
    
                  var table2 = [
                    { time: "10/1", mac: 10, win: 20 },
                    { time: "10/1", mac: 30, win: 20 },
                    { time: "10/1", mac: 45, win: 20 },
                    { time: "10/1", mac: 20, win: 20 }
                  ];
                  var data2 = jc.min(table2, function (row) {
                      return row.mac
                  });
                  console.log(data2);
                  // output: { time: "10/1", mac: 45, win: 20 };
    
                  var data3 = jc.max(table2, "mac");
                  console.log(data3);
                  // output: { time: "10/1", mac: 45, win: 20 };
                
              
  • .min

    jc.min(data, iteratee), 返回匹配到最小值所在的行, iteratee, 可选, 类型:string||function

    string为要选择的列,function回调参数为源数据的行。该函数主要暂时用于补充jc.sql无法根据某字段最小值选择其他字段(如:某峰值发生的时间),不过已经纳入规划。

                
                  var table = [5, NaN, undefined, null, 1]
                  var data = jc.min(table);
                  console.log(data)
                  // output: 1
    
                  var table2 = [
                      { time: "10/1", mac: 10, win: 20 },
                      { time: "10/1", mac: 30, win: 20 },
                      { time: "10/1", mac: 45, win: 2 }
                  ]
                  var data2 = jc.min(table2, "mac");
                  console.log(data2)
                  // output: { time: "10/1", mac: 10, win: 20 };
    
                  var data3 = jc.min(table2, "mac");
                  console.log(data3)
                   // output: { time: "10/1", mac: 10, win: 20 };
                
              
  • .map

    jc.map(data, iteratee), 遍历数组, iteratee类型:function

    和原生map用法一致,做了容错处理,传入非数组类型直接返回空数组。iteratee对应的回调参数是row和i。i是index的意思,对应数组下标

                
                  var table = [1, 2, 3, 4];
                  jc.map(table, function (row, i) {
                    console.log(row, i)
                  });
                  // output: 1, 0
                  // output: 2, 1
                  // output: 3, 2
                  // output: 4, 3
                
              
  • .forIn

    jc.forIn(data, iteratee), 遍历对象, iteratee类型:function

    对原生for in的封装。iteratee的回调函数是key,val,i。对比原生方法多了一个i, i对应和map的i是一致的,可能对大家来说可能不合理,但我希望有这么一个东西。大家不喜欢可以不用,这不是bug。

                
                  var table = {
                    a: 1,
                    b: 2,
                    c: 3,
                    d: 4,
                  };
                  jc.forIn(table, function (key, val, i) {
                    console.log(key, val)
                  });
                  // output: a, 1, 0
                  // output: b, 2, 1
                  // output: c, 3, 2
                  // output: d, 4, 3
                
              
  • 类型判断相关

    判断类型,返回true或者false

    jc.isArray(data):判断数组

    jc.isObject(data):判断普通对象

    jc.isObjEmpty(data):判断对象为空值,{}

    jc.isString(data):判断字符

    jc.isNumber(data):判断数组

    jc.isFunction(data):判断函数

    jc.isDate(data):判断日期

    jc.isRegExp(data):判断正则

    jc.isUndefined(data):判断undefined

    jc.isNoVal(data): 判断空值,即undefined, NaN或者null