Jump to content
php.lv forumi
  • 0

Algoritms vienādo ierakstu sasummēšanai


Sasa

Question

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

  • 0

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));
}

post-750-125067549077_thumb.jpg

Link to comment
Share on other sites

  • 0

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.

Link to comment
Share on other sites

  • 0

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 by Sasa
Link to comment
Share on other sites

  • 0

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?

Link to comment
Share on other sites

  • 0

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ā.

Link to comment
Share on other sites

  • 0

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 by Sasa
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...