2012-03-26 38 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); 

,但我想取数组的子名称,在这种情况下 - 大小或颜色。当我做alert(options [0])时,我得到了数组的所有元素,但对于某些特定情况,我只想获取数组名,这是大小/颜色,就像我已经说过的那样。有办法实现吗?谢谢

+5

不使用新数组,而是使用[]。 – antonjs 2012-03-26 12:10:49

+0

为什么是:)? – Malyo 2012-03-28 09:13:23

+0

这里的区别btw''''''新阵列'http://stackoverflow.com/questions/931872/whats-the-difference-between-array-and-while-declaring-a-javascript-ar/1273936# 1273936 – antonjs 2012-03-28 13:59:05

回答

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

它有点作品,但它显示所有的名称,我如何访问他们individualy(我想它在循环之后) – Malyo 2012-03-28 07:02:45

+0

只需执行此代码:'for(var key in options){ alert(key); “ }' – antonjs 2012-03-28 08:17:46

+0

MDN(Mozilla)认为in不应该用在数组上 - ”for..in不应该用于遍历索引顺序非常重要的Array。数组索引只是具有整数名称的可枚举属性,并且否则与一般对象属性相同。“ - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in – rpeg 2014-05-18 02:57:00

2

无法知道options数组的两个成员来自名为sizecolor的变量。

它们也不一定是唯一调用的,任何变量也可以指向该数组。

var notSize = size; 

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

一两件事你可以做的是使用一个对象有,而不是...

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

然后,你可以访问options.sizeoptions.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 2012-03-26 12:05:01

+1

@danp - 你必须遍历*每个*对象,包括那些封闭的对象。假设这段代码是在一个函数中,我不知道有什么方法可以找到所有在其中声明的变量(如果它不是,那么'var color'应该是'window.color') – Quentin 2012-03-26 12:05:56

1

是的。 您可以使用

alert(options[0][0]) 

得到大小 “S”

alert(options[0][1]) 

让 “红色”

0

在你不希望这种情况下,在阵列中插入sizecolor,但插入对象中

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

之后,您可以通过

var keys = Object.keys(options); 
1

访问密钥的集合找到了阵列(多维)的阵列,所以选择[0]在此情况下是尺寸数组。你需要引用孩子的第一个元素,这对你来说是:options [0] [0]。

如果您想要遍历所有条目,则可以使用描述为herefor .. in ...语法。

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 2012-03-28 07:01:09

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