2016-05-13 30 views
2

這讓我瘋狂。動態創建一個javascript/jquery多級陣列

假設我有這樣的:

var tags = ["art","wedding"]; 
var containers = ["artcon","weddingcon"]; 
var limits = [5,15]; 

如何建立這種類型的多級陣列這樣的結構?

var testarr = [ 
    "art" = [ 
     "container" = "artcon", 
     "limit" = 5, 
    ], 
    "wedding" = [ 
     "container" = "weddingcon", 
     "limit" = 15, 
    ] 
]; 

此致敬禮。

+1

這就是所謂的對象 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/指導/ Working_with_Objects – Adam

回答

4

您可以使用Array#reduce並返回對象

var tags = ["art", "wedding"]; 
 
var containers = ["artcon", "weddingcon"]; 
 
var limits = [5, 15]; 
 

 
var result = tags.reduce((res, e, i) => { 
 
    res[e] = {container: containers[i], limit: limits[i]} 
 
    return res; 
 
}, {}) 
 

 
console.log(result)

+1

我總是爲'reduce'的簡單美麗着迷... – morels

+0

這很棒。不知道減少。這正是我所需要的。 – Ron

0
var testarr = { 
    "art": { 
     "container": "artcon", 
     "limit": 5, 
    }, 
    "wedding": { 
     "container": "weddingcon", 
     "limit": 15, 
    } 
}; 

這是你有想法相當簡單的修改。注意在對象聲明中如何使用:而不是=。此外,對象聲明使用花括號代替方括號。

我們可以用這個對象做什麼?我們可以通過它循環,儘管不是相當於儘可能可靠的數組。 例如,我們可以做for (key in testarr),循環將執行兩次,其中一個key"art",另一個爲"wedding"。對此有一些警告......但在這樣一個簡單的用例中,你可能會很好。

雖然,請讓我知道如果您的問題是如何通過代碼將這三個對象轉換爲該對象結構,因爲現在看起來好像您只是想了解對象或「多級陣列」在這種情況下工作。

1

只需要一個for

var tags = ["art","wedding"]; 
var containers = ["artcon","weddingcon"]; 
var limits = [5,15]; 
// 
var obj =[]; 
for(i in tags){ 
    obj[tags[i]]=[containers[i],limits[i]]; 
} 
console.log(obj); 
// 

響應:

[art: Array[2], wedding: Array[2]] 
art:Array[2] 
0:"artcon" 
1:5 
length:2 
wedding:Array[2] 
0:"weddingcon" 
1:15 
length:2 
0

var tags = ["art","wedding"]; 
 
var containers = ["artcon","weddingcon"]; 
 
var limits = [5,15]; 
 

 
testarr = new Array(); 
 
    
 
for(i in tags){ 
 
    var obj = {}; 
 
    obj[tags[i]] = { container: containers[i], limit: limits[i] }; 
 
    testarr.push(obj) 
 
} 
 

 
console.log(testarr); 
 
console.log(testarr[0]); 
 
console.log(testarr[1]);

陣列結果:

[ 
    { "art": { 
       "container": "artcon", 
       "limit": 5, 
      } 
    }, 
    { "wedding": { 
        "container": "weddingcon", 
        "limit": 15, 
       } 
    } 
]; 

var tags = ["art","wedding"]; 
 
var containers = ["artcon","weddingcon"]; 
 
var limits = [5,15]; 
 

 
testarr = new Array(); 
 
    for(i in tags){ 
 
     testarr.push({tag: tags[i], container: containers[i], limit: limits[i] }) 
 
    } 
 

 
console.log(testarr); 
 
console.log(testarr[0]); 
 
console.log(testarr[1]);

數組結果:

[ 
    { "tag": "art", 
     "container": "artcon", 
     "limit": 5 
    }, 
    { "tag": "wedding", 
     "container": "weddingcon", 
     "limit": 15 
    } 
];