[JS] Array spaltenweise durchsuchen und Selectbox füllen?

amn.ssy

Erfahrenes Mitglied
Morgähn :-)

Weiß / hat jemand ein Beispiel wie ich ein Array spaltenweise durchsuche und mit den jeweiligen Werten (ohne doppelte) Selectboxen füllen kann?

Beispiel:
[ Select1 ] = (Spalte x) wird gefüllt mit den Werten 2011, 2010, ... obgleich in der Spalte 2011, 2010 mehrfach vorkommt.
[ Select2 ] = (Spalte y) wird gefüllt mit den Werten Sommer, Herbst, Winter obgleich auch in dieser Spalte die Begriffe mehrfach vorkommen.
[ Select3 ] = (Spalte z) ...

var daten = [
"jahr;periode;farbe;gewicht",
"2011;Fruehling;gelb;12",
"2011;Fruehling;gruen;12",
"2010;Herbst;ocker;10",
"2010;Sommer;blau;9",
"2009;Herbst;braun;9",
"2008;Fruehling;lila;11",
"2008;Sommer;gruen;8"
];

Danke schon mal im voraus ...

Grüße
_opiWahn_
 
Wo bekommst du die Daten denn her, kannst du die nicht in einem sinnvollen Format liefern?

So könntest du die Daten erstmal vorverarbeiten

Javascript:
//prüft iterativ ob ein Array einen Wert enthält (O(n))
function enthaelt_wert(arr, wert) {
	for(var i=0; i<arr.length; i++) {
		if(arr[i] == wert)
			return true;
	}
	
	return false;
}


var daten = [
	"jahr;periode;farbe;gewicht",
	"2011;Fruehling;gelb;12",
	"2011;Fruehling;gruen;12",
	"2010;Herbst;ocker;10",
	"2010;Sommer;blau;9",
	"2009;Herbst;braun;9",
	"2008;Fruehling;lila;11",
	"2008;Sommer;gruen;8"
];

var daten_sauber = [[],[],[],[]];

for(var i=1; i<daten.length; i++) {
	var spalte = daten[i].split(';');
	
	for(var k=0; k<4; k++) {
		if(!enthaelt_wert(daten_sauber[k], spalte[k]))
			daten_sauber[k].push(spalte[k]);
	}
}

//Debug Ausgabe
for(var i=0; i<4; i++) {
	for(var k=0; k<daten_sauber[i].length; k++) {
		alert(daten_sauber[i][k]);
	}
}
 
Hi,

oder die "sauberen Daten" über ein Objekt verwalten. So könnte die Suchfunktion entfallen.
Code:
var daten = [
    "jahr;periode;farbe;gewicht",
    "2011;Fruehling;gelb;12",
    "2011;Fruehling;gruen;12",
    "2010;Herbst;ocker;10",
    "2010;Sommer;blau;9",
    "2009;Herbst;braun;9",
    "2008;Fruehling;lila;11",
    "2008;Sommer;gruen;8"
];

var arrSpalten = daten[0].split(";");
var objDatenSauber = {};
for(var key in arrSpalten){
  objDatenSauber[arrSpalten[key]] = {};
}

for(var i=1; i<daten.length; i++) {
  var spalte = daten[i].split(';');

  for(var k=0; k<4; k++) {
    if(typeof objDatenSauber[arrSpalten[k]][spalte[k]] != "undefined"){}
      objDatenSauber[arrSpalten[k]][spalte[k]] = spalte[k];
    }
}

var strOut = "";
for(var key in objDatenSauber){
 for(var inner_key in objDatenSauber[key]){
   strOut += key + ": " + inner_key + "\n";
  }
}
alert(strOut);
Ciao
Quaese
 
Zurück