Объявляйте массив объектов в формате JSON и добавляйте элементы динамически

#javascript #arrays #json

#javascript #массивы #json

Вопрос:

Это глупо, но я чего-то не хватает и не смог прийти к выводу. Я пытаюсь инициализировать массив JSON и пытаюсь добавить к нему объекты JSON во время выполнения. Для примера я буду получать список повторяющихся значений с сервера примерно так, как показано ниже.

 "employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]
  

Я должен создать массив объектов и заполнить в нем эти значения.

Я пытаюсь инициализировать массив, подобный

 var myArr = []; 
  

и я хочу динамически добавлять к нему объект со свойствами, что-то вроде приведенного ниже.

 var myobj = {}

for(int i=0;i<length;i  )
{
myobj[i].name = serverrespOBJ.name;
myobj[i].lastName= 'serverrespOBJ.lastname';
myArr.push(myobj)
}
  

Я получаю сообщение об ошибке, что имя не может быть добавлено в undefined, поэтому я считаю, что мой способ добавления элементов к объекту неверен.

Я пытаюсь найти хороший пример, но не смог его получить. Будем признательны за любую помощь.

Спасибо

Комментарии:

1. Вы должны выбрать правильный ответ!

Ответ №1:

Вам понадобится что-то вроде этого:

 var data = { employees: [] }   // initially empty

data.employees.push( {
    firstName: 'John',
    lastName: 'Doe'
} );
  

Комментарии:

1. @Gendaful нет, пожалуйста, не делайте этого, это аннулирует уже предоставленные ответы.

2.@Gendaful в любом случае, ваша проблема в том, что вам нужно создавать myobj внутри цикла, иначе вы просто добавляете один и тот же объект в массив снова и снова. Вам также необходимо потерять [i] разыменование — myobj это объект, а не массив.

3. Спасибо Alnitak, короче говоря, я создаю массив myArr, а затем создаю myObj внутри цикла for, такого как myObj = {}. После этого я добавляю такие элементы, как myobj.name = ‘abc, myobj.lastname = def и т.д., А затем добавляйте объект в массив, например myarr.push (myobj), но всякий раз, когда я пытаюсь получить его с помощью myarray[0].name, он всегда возвращает undefined, как вы думаете, чего мне здесь не хватает?

4.@Gendaful возможно, исходные данные, которые вы пытаетесь поместить в myObj , не определены?

Ответ №2:

Сначала просто инициализируйте объект или массив, который вы хотите динамично воспроизводить, например:

 var myArr = [], myObj = {};
  

Теперь, если добавить к ним элемент:

 myArr.push(10);
myObj.new = 10 or myObj['new'] = 10
  

Более продвинутый :

 myArr.push(myObj); //[10, {'new':10}] --> looks our object
  

Ответ №3:

Вы можете инициализировать новый объект json следующим образом:

 var jsonObj = {};
jsonObj.employees = [];
jsonObj.employees.push({"firstName":"Waqar", "lastName":"Alamgir"});
  

или добавляйте существующие данные следующим образом:

 var jsonObj = {
    "employees":[
        {"firstName":"John", "lastName":"Doe"},
        {"firstName":"Anna", "lastName":"Smith"},
        {"firstName":"Peter", "lastName":"Jones"}
    ]
};

jsonObj.employees.push({"firstName":"Waqar", "lastName":"Alamgir"});

console.log(jsonObj);
  

Комментарии:

1. Это допустимый JSON!

2. Нет, это не так. JSON — это формат сериализации строк . У вас есть объектный литерал JS.

3. Тот, о котором вы говорите, закодирован в массиве JSON, пользователь спрашивает о массиве JSON!!

4. Нет, нет такой вещи , как «массив JSON». Существуют «массивы, закодированные в формате JSON». Ни в вопросе, ни в вашем ответе такой объект не отображается.

Ответ №4:

Проверьте эту скрипку —http://jsfiddle.net/FamBn/1 /

HTML:

 <input type="text" id="firstname" />
<input type="text" id="lastname" />
<input type="submit" id="add" />
<div id="dsp"></div>
  

JS:

 var employees=[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
];

$('#add').click(function(){
    var fname=$('#firstname').val();
    var lname=$('#lastname').val();
    employees.push({
        firstName: fname,
        lastName: lname
    });
    var output = '';
    for (var i=0; i<employees.length; i  ) {
        output  = "FirstName: "   employees[i].firstName   " LastName: "   employees[i].lastName;
    }
    $('#dsp').html(output);
    console.log(employees);
});