Arrayzuweisung aus Array
Andreas Mengel
- javascript
hallo
habe ein problem
gleich zur sache:
position = new Array(4,7,2,3);
daten[position] = "irgend ein text";
das funktioniert natürlich nicht, aber ich möchte, dass es so funktioniert wie:
daten[4][7][2][3] = "irgend ein text";
ist sowas möglich?
also ich habe einen array "position", der ganze zahlen enthält die ich in der reihenfolge, wie sie dort abgespeichert sind für die zuweisung zu einem einen mehrdimensionalen array (anzahl der dimensionen steht nicht fest!!) verwenden möchte.
danke für eure hilfe
gruss
andreas
Hi,
das funktioniert natürlich nicht, aber ich möchte, dass es so funktioniert wie:
daten[4][7][2][3] = "irgend ein text";
sowas?
position = new Array(4,7,2,3);
text = new Array("text", mehr Text", "auch Text", "was auch immer");
data = new Array();
for (i in position) {
data[position[i]] = text[i]
}
oder gleich:
data = new Array();
data[4] = "text";
data[7] = "text";
...
Gruesse Joachim
hallo
nö - ich wär froh, wenns so einfach wäre
es ist ein mehrdimensionaler array!
zudem steht die anzahl der -> dimensionen <- nicht fest.
die länge der einzelnen ebenen steht aber auch wiederum nicht fest...
gruss
andreas
Wieso nicht einfach so:
daten[position[0]][position[1]][position[2]][position[3]] = 'ein Text';
Bei verschiedenen Dimensionen würde ich if-Abfragen setzen.
if ( position.length == 1 )
...
else if (...)
Das in einen 3-Zeilen-ForSchleifen-Code zu bekommen halte ich für unmöglich...
hallo
danke soweit
also eine zeit lang könnte das funktionieren...
ich kanns ja mal bis 10 oder so machen
nur sollte es weiter wachsen gibts ein problem...
ich würde auch einen "100-Zeilen-ForSchleifen-Code" schreiben, solange es nur geht ;)
aber so langsam vermute ich es geht gar nicht :(
gruss
andreas
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Array.getDataByArray()</title>
<script type="text/javascript">
<!--
/*
hallo
habe ein problem
gleich zur sache:position = new Array(4,7,2,3);
daten[position] = "irgend ein text";das funktioniert natürlich nicht, aber ich möchte, dass es so funktioniert wie:
daten[4][7][2][3] = "irgend ein text";
ist sowas möglich?
also ich habe einen array "position", der ganze zahlen enthält die ich in der
reihenfolge, wie sie dort abgespeichert sind für die zuweisung zu einem einen
mehrdimensionalen array (anzahl der dimensionen steht nicht fest!!) verwenden möchte.danke für eure hilfe
gruss
andreas
*/
// ...
// ...
/*
hallo
danke soweit
also eine zeit lang könnte das funktionieren...
ich kanns ja mal bis 10 oder so machen
nur sollte es weiter wachsen gibts ein problem...
ich würde auch einen "100-Zeilen-ForSchleifen-Code" schreiben, solange es nur geht ;)
aber so langsam vermute ich es geht gar nicht :(
gruss
andreas
*/
// gruss Andreas,
//
// hier der diskutierte ansatz ueber eine schleife -
// wofuer auch immer Du so etwas brauchst:
//
var dataStructure = [
null,
null,
null,
null,
[
null,
null,
null,
[
null,
["ein anderer text"],
null
],
null,
null,
null,
[
null,
null,
[
null,
null,
null,
["irgendein text"],
null
],
null,
null,
null
],
null
],
null,
null
];
Array.prototype.getDataByArray = function(arrayObject) {
var data;
if (arrayObject.constructor == Array) {
data = this;
for (var i=0;i<arrayObject.length;i++) {
data = data[arrayObject[i]];
}
}
return data;
}
alert(dataStructure.getDataByArray([4,7,2,3]));
alert(dataStructure.getDataByArray([4,3,1]));
alert(dataStructure.getDataByArray({wiebitte:"ja aber"}));
// getestet unter windows mit nn4.x, mozilla 1.1, msie 6.0, opera 6.0 beta sowie opera 7.0 beta01;
//
// viel spass und by(t)e by(t)e - peterS. - pseliger@gmx.net
//
//-->
</script>
</head>
<body>
<p>
<br />
</p>
</body>
</html>
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
hallo again Andreas,
die daten-struktur hat nach korrektur wie folgt auszusehen:
(die strings waren faelschlicherweise eintraege in einem array)
var dataStructure = [
null,
null,
null,
null,
[
null,
null,
null,
[
null,
"ein anderer text",
null
],
null,
null,
null,
[
null,
null,
[
null,
null,
null,
"irgendein text",
null
],
null,
null,
null
],
null
],
null,
null
];
by(t)e by(t)e - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)
hallo
vielen dank für den riesen code
habe mir jetzt nicht die mühe gemacht ihn zu durchblicken, sorry ;)
aber irgendwie glaube ich so wie ich das da lese steht die anzahl der elemente ja auch fest...
naja habe schon eine lösung gefunden, die viel eifacher ist :D
position = new Array(4,7,2,3);
eval("daten[" + position.join("][") + "] = text;");
gruss
andreas mengel
gruss Andreas ,
hallo
vielen dank für den riesen code
bitte;
habe mir jetzt nicht die mühe gemacht ihn zu durchblicken, sorry ;)
schade - denn dann haettest Du gesehen, dass
die entscheidende methode fuer Dein Array gar
nicht so gross ist ...
Array.prototype.getDataByArray = function(arrayObject) {
var data;
if (arrayObject.constructor == Array) {
data = this;
for (var i=0;i<arrayObject.length;i++) {
data = data[arrayObject[i]];
}
}
return data;
}
... und auch daruf achtet, dass nur Arrays als parameter
dieser methode akzeptiert werden;
aber irgendwie glaube ich so wie ich das da lese steht die anzahl der elemente ja auch fest...
noe - wie kommst Du darauf ?
naja habe schon eine lösung gefunden, die viel eifacher ist :D
position = new Array(4,7,2,3);
eval("daten[" + position.join("][") + "] = text;");
eval-konstrukte koennen manchmal schon elegant aussehen,
ABER "eval is evil" !
by(t)e by(t)e - peterS. - pseliger@gmx.net
--
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)