本系列文章所有從(http://ibeginner.sinaapp.com/)遷移過來,歡迎訪問原網站。javascript
在Ember中,枚舉是包括若干子對象的對象,而且提供了不少的Ember.Enumerable API獲取所包含的子對象。咱們常見的枚舉都是基於原生的javascript數組實現的,Ember擴展了其中的不少接口。html
Ember提供一個標準化接口處理枚舉,而且容許開發者徹底改變底層數據存儲,而無需修改應用程序的其餘部分去訪問它。java
Ember的Enumerable API儘量的遵守ECMAScript規範。爲了減小與其餘庫不兼容Ember.js容許你使用本地瀏覽器實現數組。ubuntu
下面是一些重用的API列表;請注意左右兩列的不一樣。vim
標準方法api |
可被觀察方法數組 |
說明瀏覽器 |
popapp |
popObject框架 |
該函數從從數組中刪除最後項,並返回該刪除項。 |
push |
pushObject |
新增元素 |
reverse |
reverseObject |
顛倒數組元素 |
shift |
shiftObject |
把數組的第一個元素從其中刪除,並返回第一個元素的值 |
unshift |
unshiftObject |
可向數組的開頭添加一個或更多元素,並返回新的長度。 |
詳細文檔請看:http://emberjs.com/api/classes/Ember.Enumerable.html
在列表上右側的方法是Ember重寫標準的JavaScript方法而得的,他們最大的不一樣之處是使用普通的方法(左邊部分)操做的數組不會在你的應用程序中自動更新(不會觸發觀察者),而使用Ember重寫過的方法則能夠觸發觀察者,只要你的數據有變化Ember就能夠觀察到。
遍歷數組元素使用forEach方法。
var arr = ['chen', 'ubuntuvm', '1527254027@qq.com', 'i2cao.xyz', 'ubuntuvim.xyz']; arr.forEach(function(item, index) { console.log(index+1 + ", " +item); });
// 獲取頭尾的元素,直接調用Ember封裝好的firstObject和lastObject方法便可 console.log('The firstItem is ' + arr.get('firstObject')); // output> chen console.log('The lastItem is ' + arr.get('lastObject')); //output> ubuntuvim.xyz
// map方法,轉換數組,而且能夠在回調函數裏添加本身的邏輯 // map方法會新建一個數組,而且返回被轉換數組的元素 var arrMap = arr.map(function(item) { return 'map: ' + item; // 增長本身的所須要的邏輯處理 }); arrMap.forEach(function(item, index) { console.log(item); }); console.log('-----------------------------------------------');
// mapBy 方法:返回對象屬性的集合, // 當你的數組元素是一個對象的時候,你能夠根據對象的屬性名獲取對應值 var obj1 = Ember.Object.create({ username: '123', age: 25 }); var obj2 = Ember.Object.create({ username: 'name', age: 35 }); var obj3 = Ember.Object.create({ username: 'user', age: 40 }); var obj4 = Ember.Object.create({ age: 40 }); var arrObj = [obj1, obj2, obj3, obj4]; //對象數組 var tmp = arrObj.mapBy('username'); // tmp.forEach(function(item, index) { console.log(index+1+", "+item); }); console.log('-----------------------------------------------');
// filter 過濾器方法,過濾普通數組元素 // filter方法能夠跟你指定的條件過濾掉不匹配的數據,好比下面的代碼:過濾了元素大於4的元素 var nums = [1, 2, 3, 4, 5]; // 參數self值數組自己 var numsTmp = nums.filter(function(item, index, self) { if (item < 4) return true; }); numsTmp.forEach(function(item, index) { console.log('item = ' + item); // 1, 2, 3 }); console.log('-----------------------------------------------');
// 若是你想根據對象的某個屬性過濾數組你須要用filterBy方法,好比下面的代碼根據isDone這個對象屬性過濾 var o1 = Ember.Object.create({ name: 'u1', isDone: true }); var o2 = Ember.Object.create({ name: 'u2', isDone: false }); var o3 = Ember.Object.create({ name: 'u3', isDone: true }); var o4 = Ember.Object.create({ name: 'u4', isDone: true }); var todos = [o1, o2, o3, o4]; var isDoneArr = todos.filterBy('isDone', true); //會把o2過濾掉 isDoneArr.forEach(function(item, index) { console.log('name = ' + item.get('name') + ', isDone = ' + item.get('isDone')); // console.log(item); }); console.log('-----------------------------------------------');
// find和findBy方法,這兩個方法都是隻返回第一個匹配的元素,與filter和filterBy相似,一個用於返回普通的元素,一個能夠用於對象屬性判斷 var firstNum = nums.find(function(item, index, seft){ return item < 4; }); console.log('firstNum = ' + firstNum); var firstObjAttr = todos.findBy('isDone', true); console.log('name = ' + firstObjAttr.get('name') + ', isDone = ' + firstObjAttr.get('isDone')); console.log('-----------------------------------------------');
// every、some 方法 // every 用於判斷數組的全部元素是否符合條件,若是全部元素都符合指定的判斷條件則返回true,不然返回false // some 用於判斷數組的全部元素只要有一個元素符合條件就返回true,不然返回false Person = Ember.Object.extend({ name: null, isHappy: true }); var people = [ Person.create({ name: 'chen', isHappy: true }), Person.create({ name: 'ubuntuvim', isHappy: false }), Person.create({ name: 'i2cao.xyz', isHappy: true }), Person.create({ name: '123', isHappy: false }), Person.create({ name: 'ibeginner.sinaapp.com', isHappy: false }) ]; var every = people.every(function(person, index, self) { if (person.get('isHappy')) return true; }); console.log('every = ' + every); var some = people.some(function(person, index, self) { if (person.get('isHappy')) return true; }); console.log('some = ' + some);
// 與every、some相似的方法還有isEvery、isAny console.log('isEvery = ' + people.isEvery('isHappy', true)); // 所有都爲true,返回結果纔是true console.log('isAny = ' + people.isAny('isHappy', true)); //只要有一個爲true,返回結果就是true
上述方法的條用與其餘JS框架提供的方法基本類似的。學習難度不大……