Jump to content
php.lv forumi
  • 0

Algoritms vienādo ierakstu sasummēšanai


Question

Posted

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.

7 answers to this question

Recommended Posts

  • 0
Posted

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

  • 0
Posted

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.

  • 0
Posted (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 by Sasa
  • 0
Posted

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?

  • 0
Posted

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

  • 0
Posted (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 by Sasa

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