[Proto-Scripty] Re: Range utility increment
I hadn't thought of that and a good point. So if you create a NumberRange of even numbers from 2 to 6 and ask it if 3 is included, unless you override that behavior in your NumberRange class, `include` will return true. The range object itself will certainly return true in this scenario. as it does fall within the beginning and end. Although in most cases, and certainly in my example I've wrapped the instance within an Enumerable ($A) which also has an include method (actually ObjectRange inherits and overrides this method).. but the Enumerable.include method is..quoting the API docs based on the == comparison operator (equality with implicit type conversion) such that, 3 is simply not a number created by the range, hence not a value in the enumerable. http://api.prototypejs.org/language/enumerable.html#include-instance_method -- http://positionabsolute.net On Sep 28, 7:27 pm, T.J. Crowder t...@crowdersoftware.com wrote: Matt, The ObjectRange `include` method looks like this: function include(value) { if (value this.start) return false; if (this.exclusive) return value this.end; return value = this.end; } So if you create a NumberRange of even numbers from 2 to 6 and ask it if 3 is included, unless you override that behavior in your NumberRange class, `include` will return true. -- T.J. On Sep 28, 9:20 pm, Matt Foster mattfoste...@gmail.com wrote: Hey TJ, I don't understand, if a NumberRange was given an instance of EvenNumber as its start and end parameters, how would it come up with the number 3? On Sep 26, 7:10 am, T.J. Crowder t...@crowdersoftware.com wrote: All right, lads, let's move along... Each approach has its benefits and costs, it all depends on what problem you're solving. Matt, FWIW, I think you'd want to override the `include` method as well, as others a NumberRange with even numbers would include 3. At that point you're overriding most of ObjectRange, so I'd probably just start from Enumerable. This is not intended as a dig. -- T.J. On Sep 25, 9:51 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: Omg get over yourself you have taken what i said completely the wrong way.. What arrogant plug was that?... Lets take your code and look at it shall we... 30+ lines for no reason other than Hey look at me, i can write a function/class in 30 lines that only needs to be 5. Chill out dude, i wasn't knocking your code, it was just OTT. You can continue to think you are right which is arrogance in itself... there is more than one way to skin a cat. TJ's/My loop that took all of 30 seconds to create is faster no doubt, has less weight and does the job. I personaly have better things to do than write some amazing class to achieve what can be done in 30 seconds - evidently you do not so good luck with that. Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 9:16 PM Subject: [Proto-Scripty] Re: Range utility increment That only gives you even or odd increments to the top number... Incorrect, notice the constructor method? It ensures that the number given is even such that you'll never get a range of odd numbers. Granted the last line of the Jojo's question was Let's say count up by 2's: [2,4,6,8,10]. How do you do this? Hence why I went with this specific implementation, to demonstrate how you can create classes that the ObjectRange class can use to create proper ranges. I didn't feel it was necessary to abstract out the class such that it covers all bases but demonstrate how to do it one way and then Jojo could modify for their own purposes. Better to go with my/TJ's loop What an arrogant plug of your own spaghetti code and hasty discredit to my contribution. Exposing your shortfalls isn't difficult, you aren't creating a range object, completely bypassing the ObjectRange's functionality and just simply creating a hacked out array. So to put the nail in the coffin, here is the classes abstracted out var IncrementNumber = Class.create({ initialize : function(num, increment){ this.num = num; this.increment = increment;}, succ : function(){ return this.clone(this.num + this.increment, this.increment);}, clone : function(num, increment){ return new IncrementNumber(num, increment);}, toString : function(){ return this.num;} }); var EvenNumber = Class.create(IncrementNumber, { initialize : function($super, num){ $super(num, 2); this.num = (num % 2 == 1) ? num - 1 : num;}, clone : function(num, increment){ return new EvenNumber(num);} }); var NumberRange = Class.create
[Proto-Scripty] Re: Range utility increment
Matt, The ObjectRange `include` method looks like this: function include(value) { if (value this.start) return false; if (this.exclusive) return value this.end; return value = this.end; } So if you create a NumberRange of even numbers from 2 to 6 and ask it if 3 is included, unless you override that behavior in your NumberRange class, `include` will return true. -- T.J. On Sep 28, 9:20 pm, Matt Foster mattfoste...@gmail.com wrote: Hey TJ, I don't understand, if a NumberRange was given an instance of EvenNumber as its start and end parameters, how would it come up with the number 3? On Sep 26, 7:10 am, T.J. Crowder t...@crowdersoftware.com wrote: All right, lads, let's move along... Each approach has its benefits and costs, it all depends on what problem you're solving. Matt, FWIW, I think you'd want to override the `include` method as well, as others a NumberRange with even numbers would include 3. At that point you're overriding most of ObjectRange, so I'd probably just start from Enumerable. This is not intended as a dig. -- T.J. On Sep 25, 9:51 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: Omg get over yourself you have taken what i said completely the wrong way.. What arrogant plug was that?... Lets take your code and look at it shall we... 30+ lines for no reason other than Hey look at me, i can write a function/class in 30 lines that only needs to be 5. Chill out dude, i wasn't knocking your code, it was just OTT. You can continue to think you are right which is arrogance in itself... there is more than one way to skin a cat. TJ's/My loop that took all of 30 seconds to create is faster no doubt, has less weight and does the job. I personaly have better things to do than write some amazing class to achieve what can be done in 30 seconds - evidently you do not so good luck with that. Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 9:16 PM Subject: [Proto-Scripty] Re: Range utility increment That only gives you even or odd increments to the top number... Incorrect, notice the constructor method? It ensures that the number given is even such that you'll never get a range of odd numbers. Granted the last line of the Jojo's question was Let's say count up by 2's: [2,4,6,8,10]. How do you do this? Hence why I went with this specific implementation, to demonstrate how you can create classes that the ObjectRange class can use to create proper ranges. I didn't feel it was necessary to abstract out the class such that it covers all bases but demonstrate how to do it one way and then Jojo could modify for their own purposes. Better to go with my/TJ's loop What an arrogant plug of your own spaghetti code and hasty discredit to my contribution. Exposing your shortfalls isn't difficult, you aren't creating a range object, completely bypassing the ObjectRange's functionality and just simply creating a hacked out array. So to put the nail in the coffin, here is the classes abstracted out var IncrementNumber = Class.create({ initialize : function(num, increment){ this.num = num; this.increment = increment;}, succ : function(){ return this.clone(this.num + this.increment, this.increment);}, clone : function(num, increment){ return new IncrementNumber(num, increment);}, toString : function(){ return this.num;} }); var EvenNumber = Class.create(IncrementNumber, { initialize : function($super, num){ $super(num, 2); this.num = (num % 2 == 1) ? num - 1 : num;}, clone : function(num, increment){ return new EvenNumber(num);} }); var NumberRange = Class.create(ObjectRange, { _each: function(iterator) { var value = this.start; while (this.include(value.num)) { iterator(value.num); value = value.succ(); } }, }); var bottom = new IncrementNumber(-10, 2); //var bottom = new EvenNumber(-20); var top = new EvenNumber(25); var range = $A(new NumberRange(bottom, top)); console.log(range); nothing gets me fired up like a flame... On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: That only gives you even or odd increments to the top number... WHat if you wanted every 5th number ... Better to go with my/TJ's loop Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 5:57 PM Subject: [Proto-Scripty] Re: Range utility increment I'd just use an 'iterator' class to do this... var EvenNumber
[Proto-Scripty] Re: Range utility increment
All right, lads, let's move along... Each approach has its benefits and costs, it all depends on what problem you're solving. Matt, FWIW, I think you'd want to override the `include` method as well, as others a NumberRange with even numbers would include 3. At that point you're overriding most of ObjectRange, so I'd probably just start from Enumerable. This is not intended as a dig. -- T.J. On Sep 25, 9:51 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: Omg get over yourself you have taken what i said completely the wrong way.. What arrogant plug was that?... Lets take your code and look at it shall we... 30+ lines for no reason other than Hey look at me, i can write a function/class in 30 lines that only needs to be 5. Chill out dude, i wasn't knocking your code, it was just OTT. You can continue to think you are right which is arrogance in itself... there is more than one way to skin a cat. TJ's/My loop that took all of 30 seconds to create is faster no doubt, has less weight and does the job. I personaly have better things to do than write some amazing class to achieve what can be done in 30 seconds - evidently you do not so good luck with that. Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 9:16 PM Subject: [Proto-Scripty] Re: Range utility increment That only gives you even or odd increments to the top number... Incorrect, notice the constructor method? It ensures that the number given is even such that you'll never get a range of odd numbers. Granted the last line of the Jojo's question was Let's say count up by 2's: [2,4,6,8,10]. How do you do this? Hence why I went with this specific implementation, to demonstrate how you can create classes that the ObjectRange class can use to create proper ranges. I didn't feel it was necessary to abstract out the class such that it covers all bases but demonstrate how to do it one way and then Jojo could modify for their own purposes. Better to go with my/TJ's loop What an arrogant plug of your own spaghetti code and hasty discredit to my contribution. Exposing your shortfalls isn't difficult, you aren't creating a range object, completely bypassing the ObjectRange's functionality and just simply creating a hacked out array. So to put the nail in the coffin, here is the classes abstracted out var IncrementNumber = Class.create({ initialize : function(num, increment){ this.num = num; this.increment = increment;}, succ : function(){ return this.clone(this.num + this.increment, this.increment);}, clone : function(num, increment){ return new IncrementNumber(num, increment);}, toString : function(){ return this.num;} }); var EvenNumber = Class.create(IncrementNumber, { initialize : function($super, num){ $super(num, 2); this.num = (num % 2 == 1) ? num - 1 : num;}, clone : function(num, increment){ return new EvenNumber(num);} }); var NumberRange = Class.create(ObjectRange, { _each: function(iterator) { var value = this.start; while (this.include(value.num)) { iterator(value.num); value = value.succ(); } }, }); var bottom = new IncrementNumber(-10, 2); //var bottom = new EvenNumber(-20); var top = new EvenNumber(25); var range = $A(new NumberRange(bottom, top)); console.log(range); nothing gets me fired up like a flame... On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: That only gives you even or odd increments to the top number... WHat if you wanted every 5th number ... Better to go with my/TJ's loop Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 5:57 PM Subject: [Proto-Scripty] Re: Range utility increment I'd just use an 'iterator' class to do this... var EvenNumber = Class.create( { initialize : function(num){ this.num = (num % 2 == 1) ? num - 1 : num; }, succ : function(){ return new EvenNumber(this.num + 2); }, toString : function(){ return this.num; } }); var bottom = new EvenNumber(1); var top = new EvenNumber(21); var range = $A($R(bottom, top)); console.log(range); I had done this to a much greater extent in my date range selector gadget. Where it became the master range, held a range of calendar objects, which were in themselves ranges of date objects... fun stuff. https://positionabsolute.net/blog/2008/01/google-calendar-date-range-... ps just looking over that, should rename that class to PositiveEvenNumber, only going to work one way, but you get the idea On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com wrote: function everyOther(start, end, increment) { var n; var
[Proto-Scripty] Re: Range utility increment
if you want an array then i wluld use push var twos=new Array(); for(i=0;i=10;++i) { if(i%2) { twos[]=i; } } . Untested but i cant see why it wouldnt work Alex Mcauley http://www.thevacancymarket.com - Original Message - From: JoJo tokyot...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Thursday, September 24, 2009 11:15 PM Subject: [Proto-Scripty] Range utility increment http://www.prototypejs.org/api/utility/dollar-r From the documentation of the Range utility, it seems like it can only increment by 1's. For example, $A($R(1,10,true)) gives you: [1,2,3,4,5,6,7,8,9,10]. I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Prototype script.aculo.us group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~--~~~~--~~--~--~---
[Proto-Scripty] Re: Range utility increment
Hi, I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? ObjectRange itself is for ranges of consecutive values, but you can get an array of such values by applying Enumerable#collect to a range: var twos; twos = $R(1, 5).collect(function(x) { return x * 2; }); ...although frankly I'd probably go with a straight loop like Alex did (although a slightly different one): function everyOther(start, end) { var n; var rv = []; for (n = start; n = end; n += 2) { rv[rv.length] = n; } return rv; } FWIW, -- T.J. Crowder tj / crowder software / com www.crowdersoftware.com On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote: http://www.prototypejs.org/api/utility/dollar-r From the documentation of the Range utility, it seems like it can only increment by 1's. For example, $A($R(1,10,true)) gives you: [1,2,3,4,5,6,7,8,9,10]. I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Prototype script.aculo.us group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~--~~~~--~~--~--~---
[Proto-Scripty] Re: Range utility increment
function everyOther(start, end, increment) { var n; var rv = []; for (n = start; n = end; n += increment) { rv[rv.length] = n; } return rv; } Just a mod to make it better to be able to change it to 3's, 4's, 5's ;) Alex Mcauley http://www.thevacancymarket.com - Original Message - From: T.J. Crowder t...@crowdersoftware.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 8:29 AM Subject: [Proto-Scripty] Re: Range utility increment Hi, I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? ObjectRange itself is for ranges of consecutive values, but you can get an array of such values by applying Enumerable#collect to a range: var twos; twos = $R(1, 5).collect(function(x) { return x * 2; }); ...although frankly I'd probably go with a straight loop like Alex did (although a slightly different one): function everyOther(start, end) { var n; var rv = []; for (n = start; n = end; n += 2) { rv[rv.length] = n; } return rv; } FWIW, -- T.J. Crowder tj / crowder software / com www.crowdersoftware.com On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote: http://www.prototypejs.org/api/utility/dollar-r From the documentation of the Range utility, it seems like it can only increment by 1's. For example, $A($R(1,10,true)) gives you: [1,2,3,4,5,6,7,8,9,10]. I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Prototype script.aculo.us group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~--~~~~--~~--~--~---
[Proto-Scripty] Re: Range utility increment
I'd just use an 'iterator' class to do this... var EvenNumber = Class.create( { initialize : function(num){ this.num = (num % 2 == 1) ? num - 1 : num; }, succ : function(){ return new EvenNumber(this.num + 2); }, toString : function(){ return this.num; } }); var bottom = new EvenNumber(1); var top = new EvenNumber(21); var range = $A($R(bottom, top)); console.log(range); I had done this to a much greater extent in my date range selector gadget. Where it became the master range, held a range of calendar objects, which were in themselves ranges of date objects... fun stuff. https://positionabsolute.net/blog/2008/01/google-calendar-date-range-selection.php ps just looking over that, should rename that class to PositiveEvenNumber, only going to work one way, but you get the idea On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com wrote: function everyOther(start, end, increment) { var n; var rv = []; for (n = start; n = end; n += increment) { rv[rv.length] = n; } return rv; } Just a mod to make it better to be able to change it to 3's, 4's, 5's ;) Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: T.J. Crowder t...@crowdersoftware.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 8:29 AM Subject: [Proto-Scripty] Re: Range utility increment Hi, I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? ObjectRange itself is for ranges of consecutive values, but you can get an array of such values by applying Enumerable#collect to a range: var twos; twos = $R(1, 5).collect(function(x) { return x * 2; }); ...although frankly I'd probably go with a straight loop like Alex did (although a slightly different one): function everyOther(start, end) { var n; var rv = []; for (n = start; n = end; n += 2) { rv[rv.length] = n; } return rv; } FWIW, -- T.J. Crowder tj / crowder software / comwww.crowdersoftware.com On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote: http://www.prototypejs.org/api/utility/dollar-r From the documentation of the Range utility, it seems like it can only increment by 1's. For example, $A($R(1,10,true)) gives you: [1,2,3,4,5,6,7,8,9,10]. I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Prototype script.aculo.us group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~--~~~~--~~--~--~---
[Proto-Scripty] Re: Range utility increment
That only gives you even or odd increments to the top number... WHat if you wanted every 5th number ... Better to go with my/TJ's loop Alex Mcauley http://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 5:57 PM Subject: [Proto-Scripty] Re: Range utility increment I'd just use an 'iterator' class to do this... var EvenNumber = Class.create( { initialize : function(num){ this.num = (num % 2 == 1) ? num - 1 : num; }, succ : function(){ return new EvenNumber(this.num + 2); }, toString : function(){ return this.num; } }); var bottom = new EvenNumber(1); var top = new EvenNumber(21); var range = $A($R(bottom, top)); console.log(range); I had done this to a much greater extent in my date range selector gadget. Where it became the master range, held a range of calendar objects, which were in themselves ranges of date objects... fun stuff. https://positionabsolute.net/blog/2008/01/google-calendar-date-range-selection.php ps just looking over that, should rename that class to PositiveEvenNumber, only going to work one way, but you get the idea On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com wrote: function everyOther(start, end, increment) { var n; var rv = []; for (n = start; n = end; n += increment) { rv[rv.length] = n; } return rv; } Just a mod to make it better to be able to change it to 3's, 4's, 5's ;) Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: T.J. Crowder t...@crowdersoftware.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 8:29 AM Subject: [Proto-Scripty] Re: Range utility increment Hi, I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? ObjectRange itself is for ranges of consecutive values, but you can get an array of such values by applying Enumerable#collect to a range: var twos; twos = $R(1, 5).collect(function(x) { return x * 2; }); ...although frankly I'd probably go with a straight loop like Alex did (although a slightly different one): function everyOther(start, end) { var n; var rv = []; for (n = start; n = end; n += 2) { rv[rv.length] = n; } return rv; } FWIW, -- T.J. Crowder tj / crowder software / comwww.crowdersoftware.com On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote: http://www.prototypejs.org/api/utility/dollar-r From the documentation of the Range utility, it seems like it can only increment by 1's. For example, $A($R(1,10,true)) gives you: [1,2,3,4,5,6,7,8,9,10]. I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Prototype script.aculo.us group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~--~~~~--~~--~--~---
[Proto-Scripty] Re: Range utility increment
so generalize the class... - Original Message - From: Alex McAuley To: prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 12:25 PM Subject: [Proto-Scripty] Re: Range utility increment That only gives you even or odd increments to the top number... WHat if you wanted every 5th number ... Better to go with my/TJ's loop Alex Mcauley http://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 5:57 PM Subject: [Proto-Scripty] Re: Range utility increment I'd just use an 'iterator' class to do this... var EvenNumber = Class.create( { initialize : function(num){ this.num = (num % 2 == 1) ? num - 1 : num; }, succ : function(){ return new EvenNumber(this.num + 2); }, toString : function(){ return this.num; } }); var bottom = new EvenNumber(1); var top = new EvenNumber(21); var range = $A($R(bottom, top)); console.log(range); I had done this to a much greater extent in my date range selector gadget. Where it became the master range, held a range of calendar objects, which were in themselves ranges of date objects... fun stuff. https://positionabsolute.net/blog/2008/01/google-calendar-date-range-selection.php ps just looking over that, should rename that class to PositiveEvenNumber, only going to work one way, but you get the idea On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com wrote: function everyOther(start, end, increment) { var n; var rv = []; for (n = start; n = end; n += increment) { rv[rv.length] = n; } return rv; } Just a mod to make it better to be able to change it to 3's, 4's, 5's ;) Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: T.J. Crowder t...@crowdersoftware.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 8:29 AM Subject: [Proto-Scripty] Re: Range utility increment Hi, I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? ObjectRange itself is for ranges of consecutive values, but you can get an array of such values by applying Enumerable#collect to a range: var twos; twos = $R(1, 5).collect(function(x) { return x * 2; }); ...although frankly I'd probably go with a straight loop like Alex did (although a slightly different one): function everyOther(start, end) { var n; var rv = []; for (n = start; n = end; n += 2) { rv[rv.length] = n; } return rv; } FWIW, -- T.J. Crowder tj / crowder software / comwww.crowdersoftware.com On Sep 24, 11:15 pm, JoJo tokyot...@gmail.com wrote: http://www.prototypejs.org/api/utility/dollar-r From the documentation of the Range utility, it seems like it can only increment by 1's. For example, $A($R(1,10,true)) gives you: [1,2,3,4,5,6,7,8,9,10]. I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Prototype script.aculo.us group. To post to this group, send email to prototype-scriptaculous@googlegroups.com To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en -~--~~~~--~~--~--~---
[Proto-Scripty] Re: Range utility increment
That only gives you even or odd increments to the top number... Incorrect, notice the constructor method? It ensures that the number given is even such that you'll never get a range of odd numbers. Granted the last line of the Jojo's question was Let's say count up by 2's: [2,4,6,8,10]. How do you do this? Hence why I went with this specific implementation, to demonstrate how you can create classes that the ObjectRange class can use to create proper ranges. I didn't feel it was necessary to abstract out the class such that it covers all bases but demonstrate how to do it one way and then Jojo could modify for their own purposes. Better to go with my/TJ's loop What an arrogant plug of your own spaghetti code and hasty discredit to my contribution. Exposing your shortfalls isn't difficult, you aren't creating a range object, completely bypassing the ObjectRange's functionality and just simply creating a hacked out array. So to put the nail in the coffin, here is the classes abstracted out var IncrementNumber = Class.create({ initialize : function(num, increment){ this.num = num; this.increment = increment; }, succ : function(){ return this.clone(this.num + this.increment, this.increment); }, clone : function(num, increment){ return new IncrementNumber(num, increment); }, toString : function(){ return this.num; } }); var EvenNumber = Class.create(IncrementNumber, { initialize : function($super, num){ $super(num, 2); this.num = (num % 2 == 1) ? num - 1 : num; }, clone : function(num, increment){ return new EvenNumber(num); } }); var NumberRange = Class.create(ObjectRange, { _each: function(iterator) { var value = this.start; while (this.include(value.num)) { iterator(value.num); value = value.succ(); } }, }); var bottom = new IncrementNumber(-10, 2); //var bottom = new EvenNumber(-20); var top = new EvenNumber(25); var range = $A(new NumberRange(bottom, top)); console.log(range); nothing gets me fired up like a flame... On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: That only gives you even or odd increments to the top number... WHat if you wanted every 5th number ... Better to go with my/TJ's loop Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 5:57 PM Subject: [Proto-Scripty] Re: Range utility increment I'd just use an 'iterator' class to do this... var EvenNumber = Class.create( { initialize : function(num){ this.num = (num % 2 == 1) ? num - 1 : num; }, succ : function(){ return new EvenNumber(this.num + 2); }, toString : function(){ return this.num; } }); var bottom = new EvenNumber(1); var top = new EvenNumber(21); var range = $A($R(bottom, top)); console.log(range); I had done this to a much greater extent in my date range selector gadget. Where it became the master range, held a range of calendar objects, which were in themselves ranges of date objects... fun stuff. https://positionabsolute.net/blog/2008/01/google-calendar-date-range-... ps just looking over that, should rename that class to PositiveEvenNumber, only going to work one way, but you get the idea On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com wrote: function everyOther(start, end, increment) { var n; var rv = []; for (n = start; n = end; n += increment) { rv[rv.length] = n; } return rv; } Just a mod to make it better to be able to change it to 3's, 4's, 5's ;) Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: T.J. Crowder t...@crowdersoftware.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 8:29 AM Subject: [Proto-Scripty] Re: Range utility increment Hi, I'm looking for a way to specify that I want to increment by any value. Let's say count up by 2's: [2,4,6,8,10]. How do you do this? ObjectRange itself is for ranges of consecutive values, but you can get an array of such values by applying Enumerable#collect to a range: var twos; twos = $R(1, 5).collect(function(x) { return x * 2; }); ...although frankly I'd probably go with a straight loop like Alex did (although a slightly different one): function everyOther(start, end) { var n; var rv = []; for (n = start; n = end; n += 2) { rv
[Proto-Scripty] Re: Range utility increment
Omg get over yourself you have taken what i said completely the wrong way.. What arrogant plug was that?... Lets take your code and look at it shall we... 30+ lines for no reason other than Hey look at me, i can write a function/class in 30 lines that only needs to be 5. Chill out dude, i wasn't knocking your code, it was just OTT. You can continue to think you are right which is arrogance in itself... there is more than one way to skin a cat. TJ's/My loop that took all of 30 seconds to create is faster no doubt, has less weight and does the job. I personaly have better things to do than write some amazing class to achieve what can be done in 30 seconds - evidently you do not so good luck with that. Alex Mcauley http://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 9:16 PM Subject: [Proto-Scripty] Re: Range utility increment That only gives you even or odd increments to the top number... Incorrect, notice the constructor method? It ensures that the number given is even such that you'll never get a range of odd numbers. Granted the last line of the Jojo's question was Let's say count up by 2's: [2,4,6,8,10]. How do you do this? Hence why I went with this specific implementation, to demonstrate how you can create classes that the ObjectRange class can use to create proper ranges. I didn't feel it was necessary to abstract out the class such that it covers all bases but demonstrate how to do it one way and then Jojo could modify for their own purposes. Better to go with my/TJ's loop What an arrogant plug of your own spaghetti code and hasty discredit to my contribution. Exposing your shortfalls isn't difficult, you aren't creating a range object, completely bypassing the ObjectRange's functionality and just simply creating a hacked out array. So to put the nail in the coffin, here is the classes abstracted out var IncrementNumber = Class.create({ initialize : function(num, increment){ this.num = num; this.increment = increment; }, succ : function(){ return this.clone(this.num + this.increment, this.increment); }, clone : function(num, increment){ return new IncrementNumber(num, increment); }, toString : function(){ return this.num; } }); var EvenNumber = Class.create(IncrementNumber, { initialize : function($super, num){ $super(num, 2); this.num = (num % 2 == 1) ? num - 1 : num; }, clone : function(num, increment){ return new EvenNumber(num); } }); var NumberRange = Class.create(ObjectRange, { _each: function(iterator) { var value = this.start; while (this.include(value.num)) { iterator(value.num); value = value.succ(); } }, }); var bottom = new IncrementNumber(-10, 2); //var bottom = new EvenNumber(-20); var top = new EvenNumber(25); var range = $A(new NumberRange(bottom, top)); console.log(range); nothing gets me fired up like a flame... On Sep 25, 2:25 pm, Alex McAuley webmas...@thecarmarketplace.com wrote: That only gives you even or odd increments to the top number... WHat if you wanted every 5th number ... Better to go with my/TJ's loop Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: Matt Foster mattfoste...@gmail.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 5:57 PM Subject: [Proto-Scripty] Re: Range utility increment I'd just use an 'iterator' class to do this... var EvenNumber = Class.create( { initialize : function(num){ this.num = (num % 2 == 1) ? num - 1 : num; }, succ : function(){ return new EvenNumber(this.num + 2); }, toString : function(){ return this.num; } }); var bottom = new EvenNumber(1); var top = new EvenNumber(21); var range = $A($R(bottom, top)); console.log(range); I had done this to a much greater extent in my date range selector gadget. Where it became the master range, held a range of calendar objects, which were in themselves ranges of date objects... fun stuff. https://positionabsolute.net/blog/2008/01/google-calendar-date-range-... ps just looking over that, should rename that class to PositiveEvenNumber, only going to work one way, but you get the idea On Sep 25, 4:15 am, Alex McAuley webmas...@thecarmarketplace.com wrote: function everyOther(start, end, increment) { var n; var rv = []; for (n = start; n = end; n += increment) { rv[rv.length] = n; } return rv; } Just a mod to make it better to be able to change it to 3's, 4's, 5's ;) Alex Mcauleyhttp://www.thevacancymarket.com - Original Message - From: T.J. Crowder t...@crowdersoftware.com To: Prototype script.aculo.us prototype-scriptaculous@googlegroups.com Sent: Friday, September 25, 2009 8:29 AM Subject: [Proto-Scripty] Re: Range utility increment Hi, I'm looking for a way to specify that I want to increment by any value