2017-06-26 4 views
1

Warum bekomme ich nur eindimensionale Arrays?

var $arr = { 
 
     field_hide : '', 
 
     field_values: '', 
 
     field_triggers: {} 
 
    } 
 

 
    function setTrigger ($trigger, $values, $show, $arr) { 
 
     $arr.field_hide += $show + ','; 
 
     $arr.field_values += $values + ','; 
 
     $arr.field_triggers[$trigger] = []; 
 
     $arr.field_triggers[$trigger].push([$values, $show]); 
 
     return $arr; 
 
    } 
 

 
    $arr = setTrigger('file_drive','local','local_key,local_duk',$arr); 
 
    $arr = setTrigger('file_drive','cloud','cloud_key,cloud_duk',$arr); 
 
    console.log($arr)

Warum erhalte ich nur eindimensionale Arrays? Wer kann mir bei diesem Problem helfen? Das Ergebnis, das ich will, ist wie folgt:

{ 
 
"field_hide": "local_key,local_duk,cloud_key,cloud_duk,", 
 
"field_values": "local,cloud,", 
 
"field_triggers": { 
 
    "file_drive": [ 
 
    ["local","local_key,local_duk"], 
 
    ["cloud","cloud_key,cloud_duk"] 
 
    ] 
 
} 
 
}

+0

ist Ihre Frage ziemlich gut geschrieben, aber Sie brauchen um Ihren Titel zu etwas spezifischerem (und durchsuchbarem) zu redigieren. Ich würde etwas wie "Warum bekomme ich nur 1-dimensionale Arrays?" Verwenden. Auch Ihr erstes Snippet ist gut (liebe es, wenn Leute Code in ein richtiges Snippet schreiben), aber das zweite sollte stattdessen ein einfacher Codeblock sein (da es kein lauffähiger Code sein soll). Nur ein paar freundliche Tipps, da Sie neu sind :) – Clonkex

Antwort

0

Sie das Array auf ein leeres Array mit dieser Zeile jedes Mal einstellen:

$arr.field_triggers[$trigger] = []; 

Stattdessen müssen Sie prüfen, Wenn das Array bereits definiert wurde, wie folgt:

var $arr = { 
 
    field_hide: '', 
 
    field_values: '', 
 
    field_triggers: {} 
 
} 
 

 
function setTrigger($trigger, $values, $show, $arr) { 
 
    $arr.field_hide += $show + ','; 
 
    $arr.field_values += $values + ','; 
 

 
    if (!$arr.field_triggers[$trigger]) { 
 
     $arr.field_triggers[$trigger] = []; 
 
    } 
 

 
    $arr.field_triggers[$trigger].push([$values, $show]); 
 
    return $arr; 
 
} 
 

 
$arr = setTrigger('file_drive', 'local', 'local_key,local_duk', $arr); 
 
$arr = setTrigger('file_drive', 'cloud', 'cloud_key,cloud_duk', $arr); 
 
console.log($arr)

+1

Vielen Dank für Ihren Rat und Ihre Antwort!^_^ – mxh861001

+0

@ mxh861001 Keine Sorge: D – Clonkex

0

Es ist, weil Sie jedes Mal, bevor man die neuen Inhalte mit dieser Linie $arr.field_triggers[$trigger] = [];file_drive auf ein leeres Array zurück. Sie können eine if-Anweisung hinzufügen, um zu bestimmen, ob ein neues Array erstellt werden soll oder nicht.

var $arr = { 
 
     field_hide : '', 
 
     field_values: '', 
 
     field_triggers: {} 
 
    } 
 

 
    function setTrigger ($trigger, $values, $show, $arr) { 
 
     $arr.field_hide += $show + ','; 
 
     $arr.field_values += $values + ','; 
 

 
     if (!$arr.field_triggers[$trigger]) { 
 
     $arr.field_triggers[$trigger] = []; 
 
     } 
 

 
     $arr.field_triggers[$trigger].push([$values, $show]); 
 
     return $arr; 
 
    } 
 

 
    $arr = setTrigger('file_drive','local','local_key,local_duk',$arr); 
 
    $arr = setTrigger('file_drive','cloud','cloud_key,cloud_duk',$arr); 
 
    console.log($arr)

+1

Vielen Dank für Ihre Antwort!^_^ – mxh861001

+0

Kein Problem. Ich denke @Clonkex hat mich auf den Submit-Button geschlagen: D – DonovanM

-1

Sie $arr.field_triggers[$trigger] = []; mit leeren arry jedes Mal initialisiert wird, verwenden Sie diesen Code unter

var $arr = { 
 
     field_hide : '', 
 
     field_values: '', 
 
     field_triggers: {$trigger:[]} 
 
    }; 
 

 
    function setTrigger ($trigger, $values, $show, $arr) { 
 
     $arr.field_hide += $show + ','; 
 
     $arr.field_values += $values + ','; 
 
     $arr.field_triggers.$trigger.push([$values, $show]); 
 
     return $arr; 
 
    } 
 

 
    $arr = setTrigger('file_drive','local','local_key,local_duk',$arr); 
 
    $arr = setTrigger('file_drive','cloud','cloud_key,cloud_duk',$arr); 
 
    console.log($arr)

+0

Die Prämisse ist korrekt, aber die angebotene Lösung stimmt nicht. '$ arr.field_triggers. $ trigger.push ([$ values, $ show]);' funktioniert nicht wie du denkst; es macht eine Eigenschaft namens "$ trigger" anstatt den Inhalt der Variablen $ trigger zu verwenden. – Clonkex

+0

Ich hatte dieses Array beim Initialisieren von $ arr object field_triggers definiert: {$ trigger: []} –

+0

Ja, aber das ist auch nicht korrekt. Das OP möchte kein Array namens "$ trigger", sondern ein Array namens "$ trigger" (was ein Parameter der 'setTrigger'-Funktion ist), der in seinem Beispiel' file_drive' ist. Vergleichen Sie die Ergebnisse der Ausführung des Snippets Ihrer Antwort mit den Ergebnissen des Snippets meiner Antwort und Sie werden sehen, was ich meine. – Clonkex

Verwandte Themen