www.webdeveloper.com
Results 1 to 8 of 8

Thread: Problems copying from an array

  1. #1
    Join Date
    Mar 2010
    Location
    Finland
    Posts
    88

    Problems copying from an array

    Code:
    function randOrd(){ return (Math.round(Math.random())-0.5); }
    
    var cardArray = [
    [1, "hundo", "dog"], [2, "kato", "cat"], [3, "ŝafo", "sheep"]
    ];
    
    randomCardArray = cardArray.sort( randOrd );
    
    // Copy esperanto and an index number from original array to a new one.
    var eoArray = new Array(); 
    for(i=0;i<randomCardArray.length;i++){
    eoArray[i] = randomCardArray[i][0] + randomCardArray[i][1];
    }
    
    // Copy english and an index number from original array to a new one.
    var enArray = new Array(); 
    for(i=0;i<randomCardArray.length;i++){
    enArray[i] = randomCardArray[i][0] + randomCardArray[i][2];
    }
    
    document.write("Eo= " + eoArray + '<br />');
    document.write("En= " + enArray[1][1] + '<br />');
    Which gives this...

    Eo= 3ŝafo,2kato,1hundo
    En= 3sheep,2cat,1dog

    ...but if I wanted to access enArray[0][1] I would expect 'sheep', but instead I get 's'.

    How do I copy part of the array like I did in enArray, but not lose the formating of the originl cardArray?

    Thanks.

  2. #2
    Join Date
    Mar 2009
    Posts
    512
    It appears you are just concatenating everything into one single string.
    Instead of:

    e
    Code:
    oArray[i] = randomCardArray[i][0] + randomCardArray[i][1];
    try:

    Code:
    oArray[i] = [randomCardArray[i][0] ,  randomCardArray[i][1]];

  3. #3
    Join Date
    Mar 2010
    Location
    Finland
    Posts
    88
    Quote Originally Posted by Tcobb View Post
    It appears you are just concatenating everything into one single string.
    Instead of:

    e
    Code:
    oArray[i] = randomCardArray[i][0] + randomCardArray[i][1];
    try:

    Code:
    oArray[i] = [randomCardArray[i][0] ,  randomCardArray[i][1]];
    Thanks for the reply, but I'm getting output as 'undefined' when trying this.

  4. #4
    Join Date
    Jul 2011
    Posts
    12
    Try using
    Code:
    enArray[i] = [randomCardArray[i][0] , randomCardArray[i][2]];
    instead of
    Code:
    enArray[i] = randomCardArray[i][0] + randomCardArray[i][2];

  5. #5
    Join Date
    Mar 2010
    Location
    Finland
    Posts
    88
    Hi sorry, I hadn't added the [], only the ',' from the example you gave. My bad
    Works fine now

  6. #6
    Join Date
    Dec 2003
    Location
    Bucharest, ROMANIA
    Posts
    15,428
    It would be easier to use an Arrays of Objects instead of a double Array. It is more simple and more intuitive.
    Code:
    var cardArray = [
    {"hundo":"dog"},
    {"kato":"cat"},
    {"ŝafo":"sheep"}
    ];
    More about Objects and Arrays in JSON:
    www.json.org
    On the other hand: why do you need an intermediate random operation, as long as you finally sort the array?
    Last edited by Kor; 07-11-2011 at 10:23 AM.

  7. #7
    Join Date
    Mar 2010
    Location
    Finland
    Posts
    88
    Quote Originally Posted by Kor View Post
    It would be easier to use an Arrays of Object instead of a double Array. It is more simple and more intuitive.
    Code:
    var cardArray = [
    {"hundo":"dog"},
    {"kato":"cat"},
    {"ŝafo":"sheep"}
    ];
    More about Objects and Arrays in JSON:
    www.json.org
    On the other hand: why do you need an intermediate random operation, as long as you finally sort the array?
    Yep, the JSON looks nicer. I've just never had a chance to 'think' in it yet.
    I guess I randomised it twice because I thought it might make it more random (lol).
    The final code will be a Match the card game style game, which is why I have the numbers there -- so I have some way to keep check for matches. Not sure, if that was the best way to go about it though. I can post a link if you are interested?

  8. #8
    Join Date
    Jul 2008
    Location
    urbana, il
    Posts
    2,787
    i don't think your randomizer works very well.

    if my hunch is correct, the following snip should return a value close to 50, but it's consistently above 70, and i've never seen it under 50.


    the code compares 100 arrays sorted by your randOrd function, just as you do it.
    the value of the array don't matter, so the ordering will be related for any array.

    after collecting 100 shuffled arrays, i count the number of times the first 4 digits are lower than the last four digits.
    in a random array, that should be true about half the time.
    but it's true a lot more than chance alone, meaning that the big values are staying on the right.

    i don't see how the sort function would ever return zero, so it only swaps half the time...

    Code:
    function randOrd(){ return (Math.round(Math.random())-0.5); }
    
    var r=[1,2,3,4,5,6,7,8,9];
    var rs=[];
    
    for(var i=0;i<100;i++){
     rs.push(r.concat().sort(randOrd));
    }
    
    rs.filter(function(a){
     var left= a[0]+a[1]+a[2]+a[3];
     var right=a[5]+a[6]+a[7]+a[8];
      return left < right;
    }).length //should be about 50...
    Last edited by rnd me; 07-11-2011 at 06:30 PM.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

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



Recent Articles