實現函數,類似jQuery鏈式調用.

來源:互聯網
上載者:User

標籤:

 1 var origin = [ 2     {id:1,title:‘title1‘}, 3     {id:2,title:‘abcd‘}, 4     {id:3,title:‘title2‘}, 5     {id:4,title:‘efg‘} 6 ]; 7  8 var find = function(data){ 9     // your code here10 }11 12 var result = find(origin).where({‘title‘:/\d$/}).order(‘id‘,‘desc‘); //desc 非遞增13 console.log(result);  //  [{id:3,title:‘title2‘},{id:1,title:‘title1‘}]

寫了10分鐘左右:隨便A了一下

var origin = [    {id: 1, title: ‘title1‘},    {id: 2, title: ‘abcd‘},    {id: 3, title: ‘title2‘},    {id: 4, title: ‘efg‘}];var find = function (data) {    // your code here    function jquery(data) {        this.where = function (obj) {            var arr = [];            var self = this;            var key = Object.keys(obj)[0];            var temp = self.data;            for (var j = 0; j < temp.length; j++) {                if (obj[key].test(temp[j][key])) {                    arr.push(temp[j]);                }            }            this.data = arr;            return this;        };        this.order = function (name, desc) {               var self =this;            //降序            if (desc === "desc") {                for (var i = 1; i < self.data.length; i++) {                    var j = i - 1;                    var key = self.data[i][name];                    while (j >= 0 && self.data[j][name] < key) {                        self.data[j + 1][name] = self.data[j][name];                        j--;                    }                    self.data[j + 1][name] = key;                }            }            return self.data;        };        this.data = data;    }    return new jquery(data);};var result = find(origin).where({‘title‘: /\d$/}).order(‘id‘, ‘desc‘); //desc 非遞增console.log(result);  //  [{id:3,title:‘title2‘},{id:1,title:‘title1‘}]

 

唉,取屬性的時候,hasOwnPrototype我忘記怎麼寫了,後來查了一下,原來他是用來確認的,我了個,後來機智的我想起來es5好像出了keys這個方法,然後試了試果然用這個,然後就這樣咯。排序我用的插入排序,你可以選擇冒泡,選擇,快排,歸併,計數,堆排序等等,不會的可以看我的演算法部落格。我看了下別人的代碼,原來js有sort這個方法。大家自己去瞭解吧。其實鏈式調用就是返回this咯,沒什麼大不了的。反正寫的不怎麼樣,將就看一下吧,完美的話,個人認為在Object.keys()上面做文章。比如我在where方法裡傳的參數可以有很多keys:

{‘title‘:/\d$/,
‘id:‘/[2-4]/,
...
}
那這個時候,就要在做好多次篩選了,怎麼做大家自己動腦筋吧。還有就是這個排序。我們現在是只可以傳入desc. 其實我們知道有降序就會有升序(asc),當然還有亂序。 阿里啊,這不是考我們mongodb嗎。熟悉mongodb的同學這裡是不是看起來很像。

 1 // ali-for 2 var items = [ 3     {name:‘item1‘}, 4     {name:‘item2‘} 5 ]; 6 var str = ‘<div ali-for="item in items">{{item.name}}<div>‘; 7  8 var ParseDom = function(str){ 9     // your code here10 }11 12 // 對應產生的dom13 // <div>item1</div>14 // <div>item2</div>

 


這題目,我是沒做出來,我認為,起碼是不能直接認為是div的,一定是匹配html標籤。下面填一個別人寫的,主要考察的是Regex
 1 var items = [   2     {name:‘item1‘},   3     {name:‘item2‘}   4 ];   5 var str = ‘<div ali-for="item in items">{{item.name}}<div>‘;   6    7 var ParseDom = function(str){   8  9     var reg1 = /\sali-for=\"[a-zA-Z\s]+\"/gi,10         reg2 = /\{{2}[a-zA-Z\.]+\}{2}/gi,11         reg3 = /\.[a-zA-Z]+/gi,12         len = items.length;13     14     var temp = str.replace(reg1,‘‘),15         fill = str.match(reg2)[0],16         key = str.match(reg2)[0].match(reg3)[0].slice(1),17         clone_temp =‘‘,18         str = ‘‘;19 20     for(var i=0;i<len;i++){21         clone_temp = temp;22         str+=clone_temp.replace(fill,items[i][key]);23     }24 25     console.log(str);26 27 }  

 



實現函數,類似jQuery鏈式調用.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.