<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      碼農干貨系列【5】--lambda in js:lambda.js 1.0.0發布

      2012-12-27 21:55  【當耐特】  閱讀(6590)  評論(3)    收藏  舉報

      lambda.js的由來

      作為一個當耐特程序員,對lambda一定不陌生。隨著當耐特版本的更新迭代,C#也由委托==〉匿名委托==〉lambda表達式。由于javascript語言的約束,沒有提供相應的lambda的機制,所以就有了lambda.js,讓廣大jser也可以 (a,b)=>a.xx==”yyy”&&b>11 一把!

      Query Operator

      而lambda最常用的地方就是Query Operator。

      比如下面一些C# code:

      int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
      int oddNumbers = numbers.Count(n => n % 2 == 1);

      對應的javascript code(不使用lambda.js)

      var numbers = [ 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 ];
      var oddNumbers = _(numbers).count(function (item) { return item % 2 === 1 });

      使用lambda.js之后

      var numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
      var oddNumbers = _(numbers).count(_("a=>a%2===1"));

      僅此而已?

      lambda.js當然提供了underscore.js和JSLINQ都包含的功能!當然lambda.js編程風格更接近jquery style(連綴,大部分方法返回lambda對象)。

              
              var numbers = [5, 4, 1, 3, 9, 8, 6, 7, 2, 0];
              var oddNumbers = _(numbers).count(_("a=>a%2===1"));
      
              console.log(oddNumbers===5)
              //數組
              _(["aa", "bb", "cc"]).each(function (index, item) {
                  if (index === 0) console.log("arrry each:"+("aa" === item));
                  if (index === 1) console.log("arrry each:" +( "bb" === item));
                  if (index === 2) console.log("arrry each:" +( "cc" === item));
              })
      
              //支持對象
              _({ x: 100, y: 200, name: "zhanglei" }).each(function (key, value) {
      
                  if (key == "x") console.log("obj each:" +( value === 100));
                  if (key == "y") console.log("obj each:"+(value === 200));
                  if (key == "name") console.log("obj each:"+(value === "zhanglei"));
               
              })
      
              ////支持map
              var aa = _([1, 2, 3]).map(function (item) {
                  return item * 3;
              }).items
      
              console.log("map:"+(aa[0] === 3))
              console.log("map:"+(aa[1] === 6))
              console.log("map:"+(aa[2] === 9))
      
      
              //支持對象的數組
              var stooges1 = [{ name: 'zhanglei', age: 17 }, { name: 'curly', age: 25 }, { name: 'moe', age: 21 }, { name: 'larry', age: 23 }];
      
              var youngest = _(stooges1).map(function (item) { return item.name + ' is ' + item.age; }).items
              console.log(youngest)
      
      
      
              //支持查找
              var even = _([7, 2, 3, 4, 5, 6, 7, 8, 9]).find(function (item) { return item % 2 == 0; }).items;
              console.log(even) 

      這些都不是關鍵,關鍵是可以lambda化,比如這個查詢:

          var stooges3 = [{ name: 'zhanglei', age: 17 }, { name: 'curly', age: 25 }, { name: 'moe', age: 21 }, { name: 'larry', age: 23 }];
              var over18 = _(stooges3)
                  .find(function (item, index) { return item.age >= 18 && index>0})
                  .sortBy(function (item) { return item.age })
                  .first(function (item) { return item.age > 21 })
                  .map(function (stooge) { return stooge.name + ' is ' + stooge.age; })
                  .items
              ;
            
              console.log(over18);
      

      lambda化之后:

              var stooges3 = [{ name: 'zhanglei', age: 17 }, { name: 'curly', age: 25 }, { name: 'moe', age: 21 }, { name: 'larry', age: 23 }];
      
              var over18 = _(stooges3)
                 .find(_("(a,b)=> a.age >= 18 && b > 0 "))
                 .sortBy(_("b=>b.age"))
                 .first(_("item=>item.age>21"))
                 .map(_("i=>i.name + ' is ' + i.age;"))
                 .items
              ;
      
      
      
              console.log(over18);

      lambda.js預覽

      
      (function (window) {
      
          var  lambda = function (items) {
              if (lambda.type(items) === "string") return lambda._compile(items);
              return new lambda.prototype.init(items);
          },
      
         
          _lambda = window.lambda,
      
       
          __ = window._;
      
          lambda.prototype.init = function (items) {
      
              this.items = items;
              return this;
          }
      
      
          lambda.prototype.each = function (fn) {
      
              var name, i = 0, length = this.items.length, isObj = length === undefined || lambda.type(this.items) === "function";
              var its = this.items;
              if (isObj) {
                  for (name in its) {
                      fn.call(its[name], name, its[name]);
                  }
              } else {
                  for (; i < its.length;) {
                      fn.call(its[i], i, its[i++]);
                  }
              }
          }
          lambda.prototype.count= function(fn) {
              if (fn == null)
                  return this.items.length;
              else
                  return this.find(fn).items.length;
          }
          lambda.prototype.map = function (fn) {
      
              var result = [];
              this.each(function (index,item) {
      
                  result[index]=fn(item);
              })
              return lambda(result);
          }
      
          lambda.prototype.first = function (fn) {
      
              if (fn != null) {
                  return this.find(fn).first();
              }
              else {
                  // If no clause was specified, then return the First element in the Array
                  if (this.items.length > 0)
                      return lambda([this.items[0]]);
                  else
                      return null;
              }
          }
      
          lambda.prototype.find = function (fn) {
              
              var newArr=[], self = this, i = 0;
             
              this.each(function (index, item) {
      
                  if (fn(item,index)) newArr[i++] = item;
                
              })
      
              return lambda(newArr);
              
          }
      
          lambda.prototype.sortBy = function (clause) {
                  var tempArray = [];
                  for (var i = 0; i < this.items.length; i++) {
                      tempArray[tempArray.length] = this.items[i];
                  }
                  return  lambda(
                  tempArray.sort(function (a, b) {
                      var x = clause(a);
                      var y = clause(b);
                      return ((x < y) ? -1 : ((x > y) ? 1 : 0));
                  })
              );
          }
      
          lambda.type = function (obj) {
              return obj == null ?
               String(obj) :
               {
                   "[object Array]": "array",
                   "[object Boolean]": "boolean",
                   "[object Date]": "date",
                   "[object Function]": "function",
                   "[object Number]": "number",
                   "[object Object]": "object",
                   "[object RegExp]": "regexp",
                   "[object String]": "string"
               }[Object.prototype.toString.call(obj)] || "object";
          }
      
          lambda._compile = function (condition) {
              var conditionStr = condition.split("=>");
            
              if (conditionStr[0].indexOf("(") === -1) {
                  return function (item) {               
                      return eval(conditionStr[1].replace(new RegExp("\\b" + conditionStr[0] + "(?![A-Za-z0-9_])", "g"), "item"));
                  }
              } else {
                  var tempStr = conditionStr[0].replace(/\(/g, "").replace(/\)/g, "").split(",");
                  var tempItem = lambda.trim(tempStr[0]);
                  var tempIndex = lambda.trim(tempStr[1]);
                  return function (item,index) {
                      return eval(conditionStr[1].replace(new RegExp("\\b" + tempItem + "(?![A-Za-z0-9_])", "g"), "item").replace(new RegExp("\\b" + tempIndex + "(?![A-Za-z0-9_])", "g"), "index"));
                  }
              }
          }
      
      
      
          var trimLeft = /^\s+/,
          trimRight = /\s+$/,
          rnotwhite = /\S/,
          trim = String.prototype.trim;
          
          // IE doesn't match non-breaking spaces with \s
          if (rnotwhite.test("\xA0")) {
              trimLeft = /^[\s\xA0]+/;
              trimRight = /[\s\xA0]+$/;
          }
      
          lambda.trim = trim ?
              function (text) {
                  return text == null ?
                      "" :
                      trim.call(text);
              } :
      
          // Otherwise use our own trimming functionality
              function (text) {
                  return text == null ?
                      "" :
                      text.toString().replace(trimLeft, "").replace(trimRight, "");
              };
      
          lambda.prototype.init.prototype = lambda.prototype;
      
      
          
          
          lambda.noConflict = function (deep) {
              if (window._ === lambda) {
                  window._ = __;
              }
      
              if (deep && window.lambda === lambda) {
                  window.lambda = _lambda;
              }
      
              return lambda;
          }
      
      
          var root = this;
      
          if (typeof exports !== 'undefined') {
              if (typeof module !== 'undefined' && module.exports) {
                  exports = module.exports = lambda = _;
              }
              exports.lambda = exports._ = lambda;
          } else {
              root.lambda = root._ = lambda;
          }
      
      
       
      }(window))

      完整demo下載

      歡迎任何問題或者建議。

      主站蜘蛛池模板: 无套中出极品少妇白浆| 九九热视频在线观看一区| 一级做a爰片在线播放| 国产精品久久久久影院色| 精品精品国产国产自在线| 国产成人精品午夜2022| 热久在线免费观看视频 | 亚洲成av人片乱码色午夜| 91香蕉国产亚洲一二三区| 动漫av网站免费观看| 国产精品亚洲а∨天堂2021| 久久一日本道色综合久久| 欧美丰满熟妇xxxx性| 午夜福利宅福利国产精品| 亚洲 国产 制服 丝袜 一区| 樱花影院电视剧免费| 色综合人人超人人超级国碰| 制服 丝袜 亚洲 中文 综合| 色国产视频| 精品国产美女av久久久久| 九九热视频在线观看视频| 日日爽日日操| 国产91丝袜在线播放动漫| 国产熟女精品一区二区三区 | 成人免费无码大片a毛片| 国产日韩综合av在线| 视频一区视频二区在线视频| 四虎影视www在线播放| 国产精品十八禁一区二区| 亚洲无人区一区二区三区| 欧美人与动牲交精品| 日韩有码中文字幕av| 日本毛茸茸的丰满熟妇| 一区三区在线专区在线| 亚洲中文字幕日产无码成人片| 欧洲女人牲交性开放视频| 国产精品一区二区三区自拍| 国产成人a在线观看视频免费| 国产成人无码www免费视频播放| 亚洲欧洲成人a∨在线| 99riav国产精品视频|