JS: Gör array unik efter endast del av värdet?

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Boden
  • 2015-11-19 15:01

Hej. Jag skulle behöva lite hjälp att reda ut det här och är väldigt tacksam till alla som vill hjälpa till :).

Jag har en array som ser ut ungefär såhär:

1_2015-11-19 09:00:00
2_2015-11-19 09:00:00
3_2015-11-19 09:00:00
1_2015-11-19 09:30:00
2_2015-11-19 09:30:00
3_2015-11-19 09:30:00
1_2015-11-19 10:00:00
2_2015-11-19 10:00:00
3_2015-11-19 10:00:00

Alla inlägg är unika och består av ett ID och en timestamp, separerat med underscore.

Jag måste göra arrayen unik baserat på timestampen, och slumpad baserat på IDt.

Resultatet jag är ute efter:
2_2015-11-19 09:00:00
1_2015-11-19 09:30:00
3_2015-11-19 10:00:00

Alltså, för varje tidpunkt ska alla förutom en tas bort, och vilken som är kvar ska slumpas.

Är något oklart så fråga gärna.

Väldigt tacksam för all hjälp jag kan få

(Använder mig av JavaScript, jQuery och UnderscoreJs)

Något sådant här borde fungera, men är säkert inte det effektivaste. Koden antar att all data kommer i timestamp-ordning.

var testArray = [
'1_2015-11-19 09:00:00',
'2_2015-11-19 09:00:00',
'3_2015-11-19 09:00:00',
'1_2015-11-19 09:30:00',
'2_2015-11-19 09:30:00',
'3_2015-11-19 09:30:00',
'1_2015-11-19 10:00:00',
'2_2015-11-19 10:00:00',
'3_2015-11-19 10:00:00'
];

var testResult = (function(a) {
var result = [];
var currentTs;
var currentIds = [];
var pushResult = function() {
if (currentIds.length > 0 ) {
result.push(currentIds[_.random(currentIds.length-1)]+'_'+currentTs)
}
}
_.each(a, function(a) {
var parts = a.split('_');
if ( parts[1] !== currentTs) {
pushResult();
currentTs = parts[1];
currentIds = [];
}
currentIds.push(parts[0]);
});
pushResult();
return result;
})(testArray);

Du kan börja med att lägga alla som har lika timestamp i en egen lista. Typ ett objekt där properties är timestamp (inget id), och där values är listor av inlägg (id + timestamp).

Sen kan du iterera över detta objektet, och välja ett inlägg från varje lista med hjälp av Math.random().

  • Medlem
  • Boden
  • 2015-11-19 17:32

Funkar utmärkt! Tack så mycket

Olika ansatser är olika snabba, vilket kanske inte är kritiskt för ditt ändamål, men här är iaf en jämförelse mellan olika sätt

http://jszen.com/best-way-to-get-unique-value...

1
Bevaka tråden