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)

Dlaczego dostaję tylko jednowymiarowe tablice? Kto może mi pomóc w tym problemie? Rezultat, którego chcę, jest następujący:

{
 "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"]
   ]
 }
}
1
mxh861001 26 czerwiec 2017, 08:33

3 odpowiedzi

Najlepsza odpowiedź

Ustawiasz tablicę do pustej tablicy za każdym razem dzięki tej linii:

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

Zamiast tego musisz sprawdzić, czy tablica została już zdefiniowana, jak:

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)
0
Clonkex 26 czerwiec 2017, 05:42

Za każdym razem inicjujesz $arr.field_triggers[$trigger] = []; za pomocą pustej tablicy, użyj tego kodu poniżej

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)
-1
Srinivas ML 26 czerwiec 2017, 05:41

To dlatego, że za każdym razem zresetujesz file_drive do pustej tablicy przed dodaniem nowej zawartości za pomocą tej linii {X1}}. Możesz dodać oświadczenie if, aby określić, czy tworzyć nową tablicę.

    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)
0
DonovanM 26 czerwiec 2017, 06:07