2016-02-07 2 views
0

Я понимаю, что это несколько не в порядке, но, ради возможности, мне интересно, может ли кто-нибудь помочь?Создание массива с субаренами

Здесь array2 держит конечное состояние. Я бы хотел, чтобы массив1 удерживался (только я хочу сделать это с циклом for.Это прекрасно, что каждый sub_array должен быть инициализирован как их собственные переменные, я просто пытаюсь получить массив1, чтобы удерживать N число под_арраков через петлю.

Вот пример, который я пробовал, но попытка «скомпилировать» его через строку не позволяет вызывать sub_arrays доступным образом.

var numberOfSubArrays = 3 
var sub_array1 = [] 
var sub_array2 = [] 
var sub_array3 = [] 

var array1 = [] 
var array2 = [sub_array1,sub_array2,sub_array3] 

for (var i = 0; i < numberOfSubArrays; i++) { 
    array1[i] = "sub_array" + i 
} 

Любые мысли будут оценены!

+0

Вы имеете в виду 'array1 [i] = array2 [i]'? Или, может быть, какой-то конкат? – mplungjan

+0

Или 'for (var i = 0; i

+0

@mplungjan' array2' - это массив, содержащий ссылки других массивов. Если бы это был объект с ключами 'sub_array1 .... n', мы могли бы так же, как вы посоветовали. Я прав? –

ответ

1

var numberOfSubArrays = 3 
 
var sub_array1 = [1] 
 
var sub_array2 = [2] 
 
var sub_array3 = [3] 
 

 
var array1 = [] 
 
// we don't need array2 at all 
 
//var array2 = [sub_array1,sub_array2,sub_array3] 
 

 
// you need to count from 1..n, as you named your sub_arrays like that 
 
for (var i = 1; i <= numberOfSubArrays; i++) { 
 
    // you can use eval, but be careful, eval is evil! 
 
    array1[i-1] = eval("sub_array" + i) 
 
} 
 
console.log(array1);

+0

Да! Я просто не знал, что Эваль - вещь. Большое спасибо –

+0

Правильно, но я думаю, что намерение состояло в том, чтобы не иметь массив2 в коде :) – Gavriel

+0

Я думаю, что array2 должен был просто показать нам, что они хотят в массиве1 - как в ссылках на массивы, а не только на их имена в виде строк , –

1

Использование eval является противным. Это будет работать в браузерах:

var numberOfSubArrays = 3 
var sub_array1 = [] 
var sub_array2 = [] 
var sub_array3 = [] 

var array1 = [] 
var array2 = [sub_array1,sub_array2,sub_array3] 

for (var i = 0; i < numberOfSubArrays; i++) { 
    array1[i] = window["sub_array" + i + 1]; 
} 

В браузерах «глобальные» вары действительно являются объектами в «окне». Примечание: это не будет работать в таких инструментах, как jsfiddle, потому что они помещают ваш код в функцию (которую вы не видите).

Смежные вопросы