JavaScript 数组 / 结构体

23

我想在JavaScript中创建一个结构。我有一些信息需要使用,例如:

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实现这一点?感谢任何提示!

10个回答

38
只要你不需要任何花哨的功能,用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
}

6

希望能够了解您正在尝试解决的问题的更多信息。

我认为 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. “array”更名为“myArray”,以澄清我们正在引用特定的数组。 2. myArray的第一个实例是0。在Javascript中,数组从0开始。 3. Struct已更改为Object。

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

每个对象的每个属性也可以被赋予一个新值。

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

2

我会将对象字面量存储在数组中,像这样:

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);
}

1
// 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
var array = {paramName: 'paramValue', paramName2: 'paramValue2'};

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

0

JavaScript 中没有 "Struct",只有对象。

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);
}

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本身就是一个对象,但从你的示例中并不清楚。)

您可能可以使用更简洁的语法,但这严重取决于属性值。例如,您也许可以使用类似于以下内容的语法:

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,也会为假。


0
  var myArray = [];
  var obj=new Object();
  obj.name="John";
  obj.value=34;
  myArray[0]=obj;    //or myArray.push(obj);

  var obj=new Object();
  obj.name="Raziel";
  obj.value=72;
  myArray[1]=obj;  //or myArray.push(obj);

  alert(myArray[0].name+':'+myArray[0].value);
  alert(myArray[1].name+':'+myArray[1].value);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接