Как добавить объект в массив - PullRequest
272 голосов
/ 06 июня 2011

Как я могу добавить объект в массив (в javascript или jquery)?Например, в чем проблема с этим кодом?

function(){
    var a = new array();
    var b = new object();
    a[0]=b;
}

Я хотел бы использовать этот код для сохранения множества объектов в массиве function1 и вызова function2 для использования объекта в массиве.

  1. Как сохранитьобъект в массиве?
  2. Как поместить объект в массив и сохранить его в переменной?

Ответы [ 13 ]

574 голосов
/ 06 июня 2011

Поместите что-нибудь в массив, используя Array.push ().

var a=[], b={};
a.push(b);    
// a[0] === b;

Дополнительная информация о массивах

Добавить более одного элемента одновременно

var x = ['a'];
x.push('b', 'c');
// x = ['a', 'b', 'c']

Добавление элементов в начало массива

var x = ['c', 'd'];
x.unshift('a', 'b');
// x = ['a', 'b', 'c', 'd']

Добавление содержимого одного массива в другой

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
x.push.apply(x, y);
// x = ['a', 'b', 'c', 'd', 'e', 'f']
// y = ['d', 'e', 'f']  (remains unchanged)

Создать новый массив из содержимого двух массивов

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = x.concat(y);
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']
52 голосов
/ 19 ноября 2015
var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.push({operator : i})
}

здесь массив лет имеет значения типа

years[0]={operator:2015}
years[1]={operator:2016}

так продолжается.

51 голосов
/ 06 июня 2011

Прежде всего, нет object или array. Есть Object и Array. Во-вторых, вы можете сделать это:

a = new Array();
b = new Object();
a[0] = b;

Теперь a будет массивом с b в качестве единственного элемента.

19 голосов
/ 24 февраля 2017
  • JavaScript чувствителен к регистру . Вызов new array() и new object() вызовет ReferenceError, так как они не существуют.
  • Лучше избегать new Array() из-за его подверженного ошибкам поведения .
    Вместо этого назначьте новый массив с = [val1, val2, val_n]. Для объектов используйте = {}.
  • Существует множество способов расширения массива (как показано в ответе Джона ), но самый безопасный способ - просто использовать concat вместо push. concat возвращает новый массив, оставляя исходный массив без изменений. push изменяет вызывающий массив, которого следует избегать , особенно если массив определен глобально.
  • Рекомендуется также заморозить объект и новый массив во избежание непреднамеренных мутаций. Замороженный объект не является ни изменяемым, ни расширяемым (поверхностно).

Применяя эти пункты и отвечая на два ваших вопроса, вы можете определить такую ​​функцию:

function appendObjTo(thatArray, newObj) {
  const frozenObj = Object.freeze(newObj);
  return Object.freeze(thatArray.concat(frozenObj));
}

Использование:

// Given
const myArray = ["A", "B"];
// "save it to a variable"
const newArray = appendObjTo(myArray, {hello: "world!"});
// returns: ["A", "B", {hello: "world!"}]. myArray did not change.
14 голосов
/ 19 июня 2018

Используя ES6 обозначение, вы можете сделать что-то вроде этого:

Для добавления вы можете использовать оператор распространения , например:

var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);
8 голосов
/ 06 июня 2011

Расширяя ответ Габи Пуркару, включив ответ на номер 2.

a = new Array();
b = new Object();
a[0] = b;

var c = a[0]; // c is now the object we inserted into a...
6 голосов
/ 06 июня 2011

obejct явно опечатка.Но и для object, и для array нужны заглавные буквы.

Вы можете использовать короткие руки для new Array и new Object, это [] и {}

Вы можете помещать данные в массив, используя .push.Это добавляет его в конец массива.или вы можете установить индекс для хранения данных.

function saveToArray() {
    var o = {};
    o.foo = 42;
    var arr = [];
    arr.push(o);
    return arr;
}

function other() {
    var arr = saveToArray();
    alert(arr[0]);
}

other();
4 голосов
/ 21 ноября 2016

На альтернативный ответ таков.

если у вас есть и массив, как это: var contacts = [bob, mary];

и вы хотите поместить другой массив в этот массив, вы можете сделать это следующим образом:

Объявить конструктор функции

function add (firstName,lastName,email,phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}

сделать объект из функции:

var add1 = new add("Alba","Fas","Des@gmail.com","[098] 654365364");

и добавьте объект в массив:

contacts[contacts.length] = add1;
3 голосов
/ 07 января 2018

/* array literal */
var aData = [];

/* object constructur */
function Data(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
  this.fullname = function() {
    return (this.firstname + " " + this.lastname);
  };
}

/* store object into array */
aData.push(new Data("Jhon", "Doe"));
aData.push(new Data("Anna", "Smith"));
aData.push(new Data("Black", "Pearl"));

/* convert array of object into string json */
var jsonString = JSON.stringify(aData);
document.write(jsonString);

/* loop arrray */
for (var x in aData) {
  alert(aData[x].fullname());
}
3 голосов
/ 17 марта 2016
a=[];
a.push(['b','c','d','e','f']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...