Sasa Posted August 19, 2009 Report Share Posted August 19, 2009 Ir javascript masīvs, masīvā ir ieraksti ar vienādiem ID, ierakstiem vēl ir lauks daudzums, rezultātā vajadzētu sagrupēt ierakstus ar vienādiem ID un to daudzumus sasumēt kopē. Ir kāds risinājums, ātrāk gribu nonākt līdz gatavam rezultātām. Quote Link to comment Share on other sites More sharing options...
0 Aleksejs Posted August 19, 2009 Report Share Posted August 19, 2009 Parādi, kāds tas masīvs izskatās. Quote Link to comment Share on other sites More sharing options...
0 Sasa Posted August 19, 2009 Author Report Share Posted August 19, 2009 attachmentā pievienoju bildi kā izskarās rezultāts. kods ir šāds: (šādi aizpildu savu masīvu) var fittings = new Array (); ... ... var fitting = []; fitting.push(i + 1); fitting.push(Material.ID); fitting.push(Material.Name); fitting.push(Material.Code); fitting.push(Material.UnitName); fitting.push(Material.ExpenseStr); fittings.push(fitting); masīvu sasortēju izmantojot: (atradu gūglē, īstenībā nav skaidrs kā tā funkcija strādā, bet rezultāts ir tāds kā bildē sakartots smuki pēc ID lauka. ) function sortMultiDimensional(a,b) { // this sorts the array using the second element return ((a[1] < b[1]) ? -1 : ((a[1] > b[1]) ? 1 : 0)); } Quote Link to comment Share on other sites More sharing options...
0 bubu Posted August 19, 2009 Report Share Posted August 19, 2009 Nu sakārtotā masīvā summēt kopā vienādu id datus ir elementāri, nekāda raķešzinātne nav. Masīviem cauri ar ciklu iet taču tu māki, ne? var id = ierkaksti[0].id; var daudzums = ieraksti[i].daudzums; for (var i=1; i<skaits; i++) { if (ieraksti[i].id != id) { alert("id=" + id + ", daudzums=" + daudzums); daudzums = ieraksti[i].daudzums; id = ieraksti[i].id; daudzums = 0; } daudzums += ieraksti[i].daudzums; } Nesakārtotā masīvā labāk būtu izmantot papildu asociatīvo masīvu (id->daudzums), un tad vienreiz izskriet masīvam cauri, katru ierakstu daudzumu skaitot klāt pie korektā asociatīvā masīvā elementa. Bet varbūt nevajag darīt šādas lietas ar JS? Prātīgāk būtu izmantot servera puses kodu, kas tev šo lapu ģenerē (PHP? ASP.NET?). masīvu sasortēju izmantojot: (atradu gūglē, īstenībā nav skaidrs kā tā funkcija strādā, bet rezultāts ir tāds kā bildē sakartots smuki pēc ID lauka. ) Ši funkcija nekārto masīvu. Šī funkcija ir tikai salīdzināšanas funkcija - kārtošanas funkcijas callbacks, kurš nosaka kurš no elementiem a vai b ir lielāks (vai arī mazāks vai vienāds). Tavā gadījumā a un b ir tās tabulas rindas, un attiecīgi a[1] un b[1] ir to id vērtības. Quote Link to comment Share on other sites More sharing options...
0 Sasa Posted August 19, 2009 Author Report Share Posted August 19, 2009 (edited) lapu ģenerē speciāla programma, kurā priekš atskaitēm tiek izmantots IE (kaut kādā veidā, jo mainot IE uzstādījumus ietekmējās visas šis atskaites), kurā savas atskaites var rakstīt Javascriptā un HTML'ā tāpēc par tādām lietām nesatraucos. nenostrādā ar pirmajiem un pēdējiem ierakstiem, ja tiem ir vienādi ID. var id = array[0][1]; var daudzums = array[0][5]; for (var i=0; i<array.length; ++i) { if (array[i][1] != id) { Response.Write('id=' + id + ', daudzums=' + daudzums + '<br>'); daudzums = array[i][5]; id = array[i][1]; daudzums = 0; } daudzums += parseFloat(array[i][5]); } tagad nenostrādā tikai uz pēdējiem diviem ierakstiem ja to ID ir vienāds: var id = array[0][1]; var daudzums = parseFloat(array[0][5]); for (var i=1; i<array.length; ++i) { if (array[i][1] != id) { Response.Write('id=' + id + ', daudzums=' + daudzums + '<br>'); daudzums = parseFloat(array[i][5]); id = array[i][1]; daudzums = 0; } daudzums += parseFloat(array[i][5]); } nācās pie masīva pielikt baigās tukšu vērtību, lai paņemtu pēdējos divus ierakstus. Edited August 19, 2009 by Sasa Quote Link to comment Share on other sites More sharing options...
0 bubu Posted August 19, 2009 Report Share Posted August 19, 2009 Ah, par pēdējo ierakstu aizmirsu - pēc cikla atkārto to darbību, kas ir iekšā if'ā. Nekopē kodu akli, padomā kas un kāpēc tas tā darbojas. Response.Write('id=' + id + ', daudzums=' + daudzums + '<br>'); Tas taču nav javaskripts, ne? Quote Link to comment Share on other sites More sharing options...
0 mefisto Posted August 19, 2009 Report Share Posted August 19, 2009 Sasa, varbūt nākamreiz nepaņem projektu, no kura tu neko nesaproti. Es protams, ticu ka citi php.lv jūzeri man nepiekritīs, bet man rodas iespaids, ka Sasa nav spējīgs pats uzrasktīt pat vienu rindu kodas. Par katru problēmu tiek prasīts šajā forumā, un rādīti koda fragmenit, kas atrasti netā. Quote Link to comment Share on other sites More sharing options...
0 Sasa Posted August 19, 2009 Author Report Share Posted August 19, 2009 (edited) Grūti teikt kas tas ir šis tas no javascripta darbojas šis tas nē varbūt kaut kāds MS JScript (ja tāds ir). Cik runāju ar programmas autoru kurā šads atskaišu kods darobojās, tad viņi kaut kā paplašinājuši jscripta iespējas un tas jscripts parsejas kaut kādā veidā caur pašu programmu tiklīdz atskaite atveras, ļoti apmērams pastāsts. mefisto, tu tākā bišķi pārspīlē ar visu šito ... jā internetā daudz ko var atrast un, ja man to sanāk ielikt savā kodā tā, lai viss mans + viss pārējais ne manis rakstītais darbojas vienkopus kā vienota sistēma, tad varbūt nav tā ka es neko nespēju. Jā es nēesmu pro, bet kas man liedz tiekties kļūt tādam, varbūt elementāri uzdevumi man rada lielākas grūtības, un mēģinu tās atrisināt ne pārāk optimālā risinājumā, tāpēc ir arī tādi forumi, kur var jautāt. Edited August 19, 2009 by Sasa Quote Link to comment Share on other sites More sharing options...
Question
Sasa
Ir javascript masīvs, masīvā ir ieraksti ar vienādiem ID, ierakstiem vēl ir lauks daudzums, rezultātā vajadzētu sagrupēt ierakstus ar vienādiem ID un to daudzumus sasumēt kopē.
Ir kāds risinājums, ātrāk gribu nonākt līdz gatavam rezultātām.
Link to comment
Share on other sites
7 answers to this question
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.