2017-06-26 8 views
1

なぜ1次元配列しか得られないのですか?

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)

はなぜ私は一次元配列を得るのですか?誰がこの問題で私を助けることができますか? 私が望む結果は次のとおりです。

{ 
 
"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

の下にこのコードを使用より具体的な(そして検索可能な)タイトルに編集することができます。私は "なぜ1次元配列しか得られないのですか?"のようなものを使用します。また、最初のスニペットは良いです(人々が適切なスニペットにコードを置くのが大好きです)。しかし、2番目のコードは単純なコードブロックでなければなりません(実行可能なコードではないため)。あなたが新しいからちょうどいくつかのフレンドリーなヒント: – Clonkex

答えて

0

あなたは空の配列に次の行を持つたびに配列を設定している:

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

は、代わりにあなたがチェックする必要が配列が既に定義されている場合は、次のようになります。

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

あなたの助言と答えをありがとう!^_^ – mxh861001

+0

@ mxh861001心配なし:D – Clonkex

0

この行$arr.field_triggers[$trigger] = [];で新しいコンテンツを追加する前に、空の配列に毎回file_driveをリセットするからです。 ifステートメントを追加して、新しい配列を作成するかどうかを判断できます。

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

ありがとうございました!^_^ – mxh861001

+0

問題ありません。私は@ Clonkexが送信ボタンに私を打つと思う:D – DonovanM

-1

あなたは毎回Arryの空と$arr.field_triggers[$trigger] = [];を初期化している、あなたの質問はかなりよく書かれているが、あなたが必要

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

前提は正しいが、提供される解決策は正しくない。 '$ arr.field_triggers。$ trigger.push([$ values、$ show]);'あなたの考え方はうまくいかない。 '$ trigger'変数の内容を使う代わりに、" $ trigger "というプロパティを作ります。 – Clonkex

+0

$ arrオブジェクトを初期化するときにこの配列を定義しましたobject field_triggers:{$ trigger:[]} –

+0

しかし、それも正しくありません。 OPは "$ trigger"という配列を必要とせず、 '$ trigger'変数(' setTrigger'関数のパラメータ)の内容と呼ばれる配列を必要とします。この例では 'file_drive'です。回答のスニペットを実行した結果を自分の回答のスニペットの結果と比較すると、私の意図がわかります。 – Clonkex

関連する問題