2016-05-13 3 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/ Guide/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 
    } 
]; 
Смежные вопросы