JavaScript Array / Struct - PullRequest
       14

JavaScript Array / Struct

19 голосов
/ 13 декабря 2010

Я хотел бы создать структуру в 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? Спасибо за любую подсказку!

Ответы [ 9 ]

30 голосов
/ 13 декабря 2010

Если вам не нужны какие-либо необычные функции, создавать такие структуры в JavaScript очень просто.На самом деле, опубликованный вами код будет практически работать, если вы замените new Struct() следующим:

array[1] = {};

Это создаст пустой объект, и вы можете добавить в него любые свойства, например, name и value.

Чтобы создать массив, вы можете сделать что-то вроде этого:

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 голосов
/ 13 декабря 2010

Было бы хорошо узнать больше о проблеме, которую вы пытаетесь решить.

Я не думаю, что в 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. Массивы начинаются с 0 в Javascript.3. Структура изменяется на 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 голосов
/ 13 декабря 2010

Вы можете определить массивы и общие объекты в чистом 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 голосов
/ 13 декабря 2010

Я бы сохранил объектные литералы в массиве, вот так:

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 голос
/ 13 декабря 2010
// 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 голосов
/ 13 декабря 2010

Объекты 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;
  }
}

Но вы должны понимать, что вышеприведенное условие будет ложным, не только если одно или оба свойства (имя и значение)не определены, но также и в том случае, если значение одного или обоих элементов относится к пустой строке, нулю, 0, NaN или false.

0 голосов
/ 13 декабря 2010

Как насчет

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

arr[0] = new Struct("name1", "value1");
0 голосов
/ 13 декабря 2010

В JavaScript только "Struct" отсутствует Object

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 голосов
/ 13 декабря 2010
var array = {paramName: 'paramValue', paramName2: 'paramValue2'};

for(i in array) {
    _tag.i = array.i;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...