dfowler Posted June 2, 2009 Share Posted June 2, 2009 Hey guys, I need some help. Ok, here is the original array. It contains different plans for a product we are offereing. plansA = new Array(); plansA[0] = new Array(); plansA[0]['minutes'] = '500'; plansA[0]['price'] = '39.95'; plansA[0]['description'] = '1 Year; 500 minutes'; plansA[1] = new Array(); plansA[1]['minutes'] = '1000'; plansA[1]['price'] = '78.95'; plansA[1]['description'] = '1 Year; 1,000 minutes'; plansA[2] = new Array(); plansA[2]['minutes'] = '1500'; plansA[2]['price'] = '117.95'; plansA[2]['description'] = '1 Year; 1,500 minutes'; plansA[3] = new Array(); plansA[3]['minutes'] = '2000'; plansA[3]['price'] = '153.00'; plansA[3]['description'] = '1 Year; 2,000 minutes'; The user answers questions and ends up with a number ('total'), let's say 900. In my script I use this loop: for (var j in plansA) { if (plansA[j]['minutes'] >= total) { var minutes = plansA[j]['minutes']; var price = plansA[j]['price']; var description = plansA[j]['description']; break; } } To get the plan that is closest to the number they end up with (in this case it would be the 1000 minute plan). At the bottom I am giving the user the ability to compare plans. So I need to get the information from the other plans so I can display them at the bottom. I don't think I can do it in the first loop as there are multiple plans >= 900. So I thought I could create a second loop that would only get the information on the other plans: for (var j in plansA) { if (plansA[j]['minutes'] != minutes) { var minutes2 = plansA[j]['minutes']; var price2 = plansA[j]['price']; var description2 = plansA[j]['description']; } } My problem is that I know there will end up being 3 plans in the second loop. I was hoping to have the var's named minutes2, minutes3, minutes4, price2, price3, price4, etc... That way I can call them later in the code. I couldn't figure out how to do that, so I tried to put everything into an array, like this: min = newArray(); var i = 1; for (var j in plansA) { if (plansA[j]['minutes'] != minutes) { min[i]['minutes'] = plansA[j]['minutes']; min[i]['price'] = plansA[j]['price']; min[i]['description'] = plansA[j]['description']; i++; } } However, whenever I try to call the variable (like min[1]['minutes']) I get 'undefined'. Anybody know how I can do what I need to do? Thanks! Quote Link to comment https://forums.phpfreaks.com/topic/160641-array-loop-problem/ Share on other sites More sharing options...
dfowler Posted June 2, 2009 Author Share Posted June 2, 2009 Ok, I figured it out myself. I forgot to declare a new array! I modified this: min = new Array(); var i = 1; for (var j in plansA) { if (plansA[j]['minutes'] != minutes) { min[i]['minutes'] = plansA[j]['minutes']; min[i]['price'] = plansA[j]['price']; min[i]['description'] = plansA[j]['description']; i++; } } into this: min = newArray(); var i = 1; for (var j in plansA) { if (plansA[j]['minutes'] != minutes) { min[i] = new Array(); min[i]['minutes'] = plansA[j]['minutes']; min[i]['price'] = plansA[j]['price']; min[i]['description'] = plansA[j]['description']; i++; } } Quote Link to comment https://forums.phpfreaks.com/topic/160641-array-loop-problem/#findComment-847796 Share on other sites More sharing options...
bibby Posted June 2, 2009 Share Posted June 2, 2009 Arrays in javascript aren't meant to be used that way, fyi. Not like "associative arrays" that you'd find in php. What you want to use are new Objects(), or just {}; The difference is subtle, but arrays should have numeric keys only. check out http://godbit.com/article/js-tidbits-datatypes-object-object-vs-array and search for similar articles. beware of this, too: a = []; // new array a[10] = true; a.length; // == 11 ! Quote Link to comment https://forums.phpfreaks.com/topic/160641-array-loop-problem/#findComment-847817 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.