Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 3 of 3
  1. #1
    Senior Coder rnd me's Avatar
    Join Date
    Jun 2007
    Location
    Urbana
    Posts
    4,350
    Thanks
    11
    Thanked 589 Times in 570 Posts

    easy numbered array generation

    i have been search forever for a way to make a numbered array using only native functions and without looping.

    i had figured out a long, convoluted way of doing it with eval and bind(), but it was not pretty.

    the one trick to this native functionality is that you have to specify a number one more than the ceiling you want, but that's not the end of the world...

    the method is related to the popular String repeat trick:
    Code:
    Array(101).join(",").split(",").join("hello world \t")
    you can even shorten the code below by removing ".map(Number)" if you don't need "real Number" numbers, but simply a list of digits.

    here is the numbered array code:

    Code:
    Object.keys(  new String(  Array(101)  )    ).map(Number)
    result
    Code:
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

    for you cut-and-paste pleasure, here are some working reusables:


    as a function
    Code:
    function arr(n) {
    	return Object.keys(new String(Array(n - -1))).map(Number);
    }
    usage
    Code:
    arr(10) // === [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    arr(12).map(arr).join("\n") /* ==="
    
    0
    0,1
    0,1,2
    0,1,2,3
    0,1,2,3,4
    0,1,2,3,4,5
    0,1,2,3,4,5,6
    0,1,2,3,4,5,6,7
    0,1,2,3,4,5,6,7,8
    0,1,2,3,4,5,6,7,8,9
    0,1,2,3,4,5,6,7,8,9,10 " 
    
    */



    as a mutating array prototype
    Code:
    Array.prototype.numbered = function _numbered(n) {
    	n = n || this.length;
    	this.length = 0;
    	this.push.apply(this, Object.keys(new String(Array(n - -1))).map(Number));
    	return this;
    };//end [].numbered()

    and as a hidden mutating array prototype

    Code:
    Object.defineProperty(Array.prototype,"numbered", function _numbered(n) {
    	n = n || this.length;
    	this.length = 0;
    	this.push.apply(this, Object.keys(new String(Array(n - -1))).map(Number));
    	return this;
    });//end [].numbered()

    usage
    Code:
    ["a","b","c"].numbered() // === [0, 1, 2]
    
    ["a","b","c"].numbered(10) // === [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    Array().numbered(10) // === [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    my site (updated 13/9/26)
    BROWSER STATS [% share] (2014/5/28) IE7:0.1, IE8:5.3, IE11:8.4, IE9:3.2, IE10:3.2, FF:18.2, CH:46, SF:7.9, NON-MOUSE:32%

  2. Users who have thanked rnd me for this post:

    Dormilich (10-11-2012)

  • #2
    Senior Coder Dormilich's Avatar
    Join Date
    Jan 2010
    Location
    Behind the Wall
    Posts
    3,296
    Thanks
    13
    Thanked 345 Times in 341 Posts
    should work equally well:
    PHP Code:
    function arr(n) {
        return 
    Object.keys(new String(Array(+1))).map(Number);

    Last edited by Dormilich; 10-11-2012 at 08:45 AM.
    The computer is always right. The computer is always right. The computer is always right. Take it from someone who has programmed for over ten years: not once has the computational mechanism of the machine malfunctioned.
    André Behrens, NY Times Software Developer

  • #3
    Senior Coder rnd me's Avatar
    Join Date
    Jun 2007
    Location
    Urbana
    Posts
    4,350
    Thanks
    11
    Thanked 589 Times in 570 Posts
    Quote Originally Posted by Dormilich View Post
    should work equally well:
    PHP Code:
    function arr(n) {
        return 
    Object.keys(new String(Array(+1))).map(Number);

    i figured out an even shorter way:
    PHP Code:
    function arr(n) {
        return 
    Object.keys(Object(Array(n)+"r")).map(Number);
    }

    arr(5) +""// === "0,1,2,3,4" 
    it uses a one-char string to both coerce the array and pad the length to the desired count.
    my site (updated 13/9/26)
    BROWSER STATS [% share] (2014/5/28) IE7:0.1, IE8:5.3, IE11:8.4, IE9:3.2, IE10:3.2, FF:18.2, CH:46, SF:7.9, NON-MOUSE:32%


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •