underscore


一直想為js寫一個數組排序,遍歷,字符串操作的綜合的大類,不知道盡然有Underscore這么好的東西。

Underscore是與backnone一起的方法庫。來見識一下underscore的強大吧。

 _each :_.each(list, iterator, [context])

list 為數組時 iterator傳遞三個參數(element, index, list)

list為對象時 iterator傳遞三個參數(value, key, list)

如果傳遞了context參數,則把iterator綁定到context對象上。

var someOtherArray = ["name","patrick","d","w"];

_.each([1, 2, 3], function(num) { 
    // In here, "this" refers to the same Array as "someOtherArray"

    alert( this[num] ); // num is the value from the array being iterated
                        //    so this[num] gets the item at the "num" index of
                        //    someOtherArray.
}, someOtherArray);

 

 

var person = {};
person.friends = {
  name1: "kitty",
  name2: "sonny",
  name3: "age",
  name4: "ponny"
};

_.each(['name4', 'name2'], function(name){
  // this refers to the friends object op person
  alert(name+":"+this[name]);
}, person.friends);
這樣當遍歷一個數據集合只需或個別屬性的值,不需要通過if else這樣繁瑣的判斷,對比jquery的$.each()多了context參數。不能代替$(obj).each().

 

 

sortby:uderscore輕松完成多維數組單個字段的(時間,數字,字符)排序

 (function ($) {
        var arry=[{name:"kityy",age:21},
            {name:"sonny",age:3 },
            { name:"bage",age:29},
            {name:"quick",age:33 },
            { name:"funny",age:35 }]
       var sorted= _.sortBy(arry,function(data){ return -data.age})
        for(var i = 0; i < sorted.length; ++i)
            console.log(sorted[i]["name"]+":"+sorted[i]["age"]);
    })(jQuery);
在backbone中使用:
 M = Backbone.Model.extend();
        C = Backbone.Collection.extend({
            model: M
        });
        var c = new C();
        c.add([
            {name:"kityy",age:21},
            {name:"sonny",age:3 },
            { name:"bage",age:29},
            {name:"quick",age:33 },
            { name:"funny",age:35 }
        ]);
        var sorted = c.sortBy(function(m) { return -m.get('age')});
        for(var i = 0; i < sorted.length; ++i)
            console.log(sorted[i].get('name')+":"+sorted[i].get('age'));

 flatten_.flatten(array)將多維數組合並成一位數組,js里用處不大

 

extend: underscore 合並對象,翻譯成update對象更形象,backbone依賴這個方法做做原型鏈的擴展

    var ArrayProto = Array.prototype,
    slice = ArrayProto.slice

    var extend = function (obj) {
        _.each(slice.call(arguments, 1), function (source) {
            if (source) {
                for (var prop in source) {
                    obj[prop] = source[prop];
                }
            }
        });
        return obj;
    };

使用方法

extend(hh,{o:21},{mm:45})

  

  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM