2017-06-26 58 views
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

你的問題是相當寫得很好,但是你需要編輯您的標題到一些更具體的(和搜索)。我會用「爲什麼我只能得到一維數組?」。此外,您的第一個片段是好的(當人們將代碼放入正確的代碼片段時很喜歡它),但第二個片段應該是簡單的代碼塊(因爲它不是可運行的代碼)。只是一些友好的技巧,因爲你是新的:) – 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

您使用空初始化$arr.field_triggers[$trigger] = []; ARRY每一次,使用此代碼下面

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對象field_triggers時已經定義了這個數組:{$ trigger:[]} –

+0

是的,但那也不正確。 OP不需要一個名爲「$ trigger」的數組,他想要一個名爲$ trigger的變量(這是'setTrigger'函數的參數)的內容的數組,在他的例子中是'file_drive'。比較運行你的答案片段的結果和我的答案片段的結果,你會明白我的意思。 – Clonkex

相關問題