2010-12-13 37 views
16

我想在javascript中创建一个结构。我有一双信息的,我想用,例如:JavaScript Array/Struct

array[1] = new Struct(); 
array[1].name = "parameter-name"; 
array[1].value = "parameter-value"; 

array[2] = new Struct(); 
array[2].name = "parameter-name2"; 
array[2].value = "parameter-value2"; 

这可能与不同势值的不同势页面上,也许元素在我的阵列中,也许2-20 ..

后来,我一般在JavaScript中,我想解析阵列,并继续我的参数,例如:

for(i=1 to length_of_my_array) { 
    _tag.array[i].name = array[i].value; 
} 

我怎么能认识到这一点与纯JavaScript?感谢您的任何提示!

回答

26

只要你不想要任何奇特的功能,在JavaScript中创建这样的结构真的很容易。事实上,你发布的代码几乎工作,如果你更换new Struct()与此:

array[1] = {}; 

这将创建一个空的对象,你可以把你在它想要的任何属性,如namevalue

要创建一个数组,你可以这样做:

var array = []; // empty array 

// object literal notation to create your structures 
array.push({ name: 'abc', value: 'def' }); 
array.push({ name: 'ghi', value: 'jkl' }); 
... 

和数组在迭代:

for (var i = 0; i < array.length; i++) { 
    // use array[i] here 
} 
+1

+1快手指;) – gnarf 2010-12-13 17:25:41

0
var array = {paramName: 'paramValue', paramName2: 'paramValue2'}; 

for(i in array) { 
    _tag.i = array.i; 
} 
0

没有 “结构” 在JavaScript中唯一的对象

my_array = new Array(); 
my_array.push({name: 'john', age:31}); 
my_array.push({name: 'da_didi', age:120}); 

for (i=0; i<my_array.length; i++) 
{ 
    alert(my_array[i].name); 
} 
2

我会存储objec吨文字阵列中,像这样:

var myArray = []; 

myArray[0] = {name:"some name", value:"some value"}; 
myArray[1] = {name:"another name", value:"another value"}; 

for (i=0; i < myArray.length; i++) { 
    console.log(myArray[i].name + '/' + myArray[i].value); 
} 
3

可以在纯JavaScript/JSON定义数组和通用对象:

var array = []; // empty array 
array.push({name: 'parameter-name', value: 'parameter-value'}); 
array.push({name: 'parameter-name2', value: 'parameter-value2'}); 
console.log(array); 
// Output: 
// [Object { name="parameter-name", value="parameter-value2"}, Object { name="parameter-name2", value="parameter-value2"}] 

还可以定义相同的数组,像这样:

var array = [ 
    {name: 'parameter-name', value: 'parameter-value'}, 
    {name: 'parameter-name2', value: 'parameter-value2'} 
]; 

至于循环阵列:

for (var i = 0; i<array.length; i++) { 
    var elem = array[i]; 
    console.log(elem.name, elem.value); 
} 

// Outputs: 
// parameter-name parameter-value2 
// parameter-name2 parameter-value2 
0
// initialize empty array  
var myArray = []; 

// fill it with an object - the equivalent of a struct in javascript 
myArray.push({ 
    name: 'example-name' 
    value: 'example-value' 
}); 
// repeat as neccessary 

// walking through the array 
for (var i = 0; i < myArray.length; i++) 
{ 
    // retrieving the record 
    record = myArray[i]; 

    // and accessing a field 
    doSomething(record.name); 
} 
0

如何

function Struct(name, value) { 
    this.name = name; 
    this.value = value; 
} 

arr[0] = new Struct("name1", "value1"); 
0

JavaScript对象是松散物:属性可以添加和动态删除。因此,按照您的建议制作一个新的Struct(),并不保证返回的对象将始终具有您期望它具有的属性。你必须在使用(鸭打字)的角度来检查属性的可用性:

var i, element; 
for (i = 0; i < array.length; i++) { 
    element = array[i]; 
    if (Object.hasOwnProperty.call(element, "name") 
     && Object.hasOwnProperty.call(element, "value")) { 
    _tag[element.name] = element.value; 
    } 
} 

(另外,我只是猜测,_tag是一个对象本身,而不是从你的例子清晰。 )

您或许可以使用更简洁的语法,但这在很大程度上取决于属性的值。例如,您-might-能够使用这样的事情:

var i, element; 
for (i = 0; i < array.length; i++) { 
    element = array[i]; 
    if (element.name && element.value) { 
    _tag[element.name] = element.value; 
    } 
} 

但你必须认识到,上述条件将是错误的,不仅如果属性(名称和值)中的一个或两个是不确定的而且如果其中之一或两者的值引用空字符串null,0,NaN或false。

4

如果您想了解更多有关您尝试解决问题的信息,那将是一件好事。

我不认为在JavaScript中有一个叫做Struct的对象,除非你定义一个对象。

我想你正在寻找的是一个JavaScript对象而不是Struct。有很多方法可以创建一个新对象,并且它们可以嵌套在数组或其他对象中。

myArray[0] = new Object(); 
myArray[0].name = "parameter-name"; 
myArray[0].value = "parameter-value"; 

myArray[1] = new Object(); 
myArray[1].name = "parameter-name2"; 
myArray[1].value = "parameter-value2"; 

请注意,我在一对夫妇的方式已经改变了你的代码: 1.“阵列”被命名为“myArray的”澄清,我们指的是一个特定的阵列。 2. myArray的第一个实例是0.在Javascript中,数组从0开始。 3.结构更改为对象。

myarray = [ 
    { 
     "name":"parameter-name", 
     "value":"parameter-value" 
    }, 
    { 
     "name":"parameter-name2", 
     "value":"parameter-value2" 
    } 
]; 

这是做同样的事情的替代语法。它使用“文字符号”来指定数组(方括号)和对象(大括号)。

for(var i = 0; i < myArray.length; i++) { 
    for(key in myArray[i]) { 
     alert(key + " :: " myArray[i][key]); 
    } 
} 

这将遍历数组并提醒您每个对象的属性。

alert(myArray[0]['value']) //parameter-value 
myArray[0]['value'] = "bar"; 
alert(myArray[0]['value']) //bar 

还可以为每个对象的每个属性分配一个新值。