Arr.js:標準配列のイベント

Arr.jsは、標準のArray



から継承された「クラス」です。 特徴的な機能は次のとおりです。配列内のすべての変更を追跡するchange



イベントの存在、および配列の作業を簡素化するためのinsert()



update()



remove()



set()



get()



メソッド。 標準Array



すべてのネイティブメソッドArray







 var fruits = new Arr('apple', 'orange', 'pineapple'); fruits.on('change', function(event) { alert('I changed fruits: ' + fruits.join(', ')); }); fruits.push('banana');
      
      







コード:基本的な方法の例
 var fruits = new Arr('apple', 'orange', 'pineapple'); fruits.get(0); // apple fruits.get(10, 'lime'); // trying to get undefined element - return defaultValue // lime fruits.get(20); // trying to get undefined element // null fruits.set(1, 'nut'); // ['nut', 'orange', 'pineapple'] fruits.insert(['lime', 'banana', 'kivi']); // ['nut', 'orange', 'pineapple', 'lime', 'banana', 'kivi'] fruits.remove(function(item, index) { if (item.indexOf('apple') !== -1) { // remove only items where word "apple" is founded return true; } }); // ['nut', 'orange', 'lime', 'banana', 'kivi'] fruits.update(function(item, index) { if (item.indexOf('nut') !== -1) { // update "nut" to "apple" return 'apple'; } }); // ['apple', 'orange', 'lime', 'banana', 'kivi']
      
      









イベントを変更する理由とそれらの操作方法



イベントの存在により、次のことが可能になります。



1つのイベントがサポートされています- change







 var fruits = new Arr('apple', 'orange', 'pineapple'); fruits.on('change', function(event) { // handler console.log(event); }); fruits.push('banana'); // { "type": "insert", "items": ["banana"] } fruits.remove(function(item) { return item == 'banana'; }); // { "type": "remove", "items": ['banana"] }
      
      





handler



に渡されたオブジェクトevent



によって、配列で何が起こったかを理解できます。 event



type



オブジェクトのプロパティは、値をとることができます: insert



update



remove



items



プロパティを使用すると、配列のどの要素が影響を受けたかを調べることができます。



良い例



 //         var weatherList = new Arr; //     -   weatherList.on('change', function() { var el = $('#weather'); var celsius, maxCelsius, minCelsius, weather; el.html(''); weatherList.forEach(function(item) { celsius = Math.floor(item.main.temp - 273); maxCelsius = Math.floor(item.main.temp_max - 273); minCelsius = Math.floor(item.main.temp_min - 273); weather = item.weather.pop().main; el.append('<li><b>' + item.name + '</b> ' + ' ' + celsius + ' (max: ' + maxCelsius + ', min: ' + minCelsius + ') ' + weather + '</li>'); }); }); //    ,   weatherList function loadWeather(lat, lng) { $.get('http://api.openweathermap.org/data/2.5/find?lat=' + lat + '&lon=' + lng + '&cnt=10').done(function(data) { // clear weather list weatherList.remove(function() { return true; }); // insert items weatherList.insert(data.list); }); } //    loadWeather(50.4666537, 30.5844519);
      
      





JSBinの動作例をご覧ください



結論として



github:// MatthewMueller / arrayがあり、アイデアは新しいものではないことを付け加えます。 しかし、私にはコードが過負荷に見え、実際にパフォーマンスの問題につながる可能性があります。 したがって、標準のArray



を「拡張」することが決定されました。



計画:ライブラリを高品質のテストでカバーしたいという要望があります。これに精通している人が助けてくれたらいいと思います。



removeListener()



メソッドを除き、メソッドのリストを拡張する予定はありません。



Arr.jsリポジトリとドキュメント(en)



改善に関するコメントを歓迎します!



PS:個人的な目的のために、Arr.jsを使用するコンポーネントhttps://github.com/jmas/list/blob/master/List.jsが開発されました。 このコンポーネントは、データ配列が変更されたときにHTMLを個別に更新するリストを作成するために使用されます。 コンポーネントはcomponentjsを使用して依存関係を解決します。



All Articles