2012-03-26 1 views
18

Вот пример того, что я делаю:Javascript массива внутри массива - как я могу назвать ДЕТСКИМ имя массива

var size = new Array("S", "M", "L", "XL", "XXL"); 
    var color = new Array("Red", "Blue", "Green", "White", "Black"); 
    var options = new Array(size, color); 

Я делаю петлю, выберите форму рюшечки, которые работают хорошо, но я хочу, чтобы принести имя дочернего элемента массива, в данном случае - размер или цвет. Когда я делаю предупреждение (опции [0]), я получаю все элементы массива, но для некоторого конкретного случая я хочу получить только имя массива, которое является размером/цветом, как я уже сказал. Есть ли способ достичь этого? Спасибо

+5

Не использовать новый массив, используйте [] вместо этого. – antonjs

+0

и почему это :)? – Malyo

+0

здесь разница btw '[]' и 'new Array' http://stackoverflow.com/questions/931872/whats-the-difference-between-array-and-while-declaring-a-javascript-ar/1273936# 1273936 – antonjs

ответ

22

Я хотел бы создать объект так:

var options = { 
    size: ["S", "M", "L", "XL", "XXL"], 
    color: ["Red", "Blue", "Green", "White", "Black"] 
}; 


alert(Object.keys(options)); 

Для получения доступа к ключам individualy:

for (var key in options) { 
    alert(key); 
} 

PS: когда вы создаете новый объект массива не использовать new Array использование [] вместо.

+0

Это своего рода работа , но он отображает все имена, как мне получить доступ к ним индивидуально (я хочу, чтобы он был внутри цикла после этого) – Malyo

+0

Просто выполните этот код: 'for (var key in options) { alert (key); } ' – antonjs

+0

MDN (Mozilla) предполагает, что for in не следует использовать в массивах -« for..in не следует использовать для итерации по массиву, где индексный порядок важен. Индексы массива - это просто перечислимые свойства с целыми именами и в противном случае это идентично общим свойствам объекта. " - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in – rpeg

2

Невозможно узнать, что два элемента массива options получены из переменных с именем size и color.

Они также не обязательно называются исключительно, любая переменная может также указывать на этот массив.

var notSize = size; 

console.log(options[0]); // It is `size` or `notSize`? 

Одна вещь, которую вы можете сделать, это использовать объект там вместо ...

var options = { 
    size: size, 
    color: color 
} 

Тогда вы могли бы получить доступ к options.size или options.color.

2

Вы не можете. У массива нет имени.

У вас есть только две ссылки на массив: один в переменной и другой в третьем массиве.

Невозможно найти все ссылки, которые существуют для данного объекта.

Если имя важно, то храните его с данными.

var size = { data: ["S", "M", "L", "XL", "XXL"], name: 'size' }; 
var color = { data: ["Red", "Blue", "Green", "White", "Black"], name: 'color' }; 
var options = [size, color]; 

Очевидно, что вам придется изменить существующий код, который получает доступ к данным (так как теперь у вас есть options[0].data[0] вместо options[0][0], но у вас также есть options[0].name).

+0

«Невозможно найти все ссылки, которые существуют» - кажется неправильным, извините Квентин. Вы можете прокручивать свойства объекта, чтобы увидеть, что там есть. – dmp

+1

@ danp - Вам нужно будет пропустить каждый * объект, включая те, которые были завернуты в закрытие. Предполагая, что этот код находится в функции, я не знаю ни одного способа найти все объявленные в нем переменные (если бы это не было, то 'var color' должен был бы выглядеть как' window.color') – Quentin

1

Да, это так. Вы можете использовать

alert(options[0][0]) 

, чтобы получить размер "S"

или

alert(options[0][1]) 

, чтобы получить цвет "красный"

0

В этом случае вы не хотите вставить size и color внутри массива, но в объект

var options = { 
    'size': size, 
    'color': color 
    }; 

После этого вы можете получить доступ к наборам ключей от

var keys = Object.keys(options); 
1

Вы сделали массив массивов (многомерного), поэтому варианты [0] в данном случае это массив размера. вам нужно ссылаться на первый элемент дочернего элемента, который для вас: options [0] [0].

Если вы хотите просмотреть все записи, вы можете использовать синтаксис for .. in ..., который описан here.

var a = [1,2,4,5,120,12]; 
for (var val in t) { 
    console.log(t[val]); 
} 

var b = ['S','M','L']; 
var both = [a,b]; 

for (var val in both) { 
    for(val2 in both[val]){console.log(both[val][val2])} 
} 
5

вы можете получить, используя key значение что-то вроде этого:

var size = new Array("S", "M", "L", "XL", "XXL"); 
var color = new Array("Red", "Blue", "Green", "White", "Black"); 
var options = new Array(size, color); 

var len = options.length; 
for(var i = 0; i<len; i++) 
{ 
for(var key in options[i]) 
    { 
     alert(options[i][key]) 
    } 

} 

посмотреть здесь: http://jsfiddle.net/8hmRk/8/

+0

Хорошо, что ваш пример не работает, он предупреждает все значения массива массива, а не имя массива массива – Malyo

0

массив так же, как и любой другой объект. Вы можете дать ему имя, если хотите.

var size = new Array("S", "M", "L", "XL", "XXL"); 
var color = new Array("Red", "Blue", "Green", "White", "Black"); 
var options = new Array(size, color); 
color.name = "color"; 
size.name = "size"; 
options[0].name == "size" 
>true 
Смежные вопросы