如何将对象添加到数组中

nas*_*ser 286 javascript arrays object

如何将对象添加到数组(在javascript或jquery中)?例如,这段代码有什么问题?

function(){
    var a = new array();
    var b = new object();
    a[0]=b;
}
Run Code Online (Sandbox Code Playgroud)

我想使用此代码在function1数组中保存许多对象,并调用function2以使用数组中的对象.

  1. 如何在数组中保存对象?
  2. 如何将对象放入数组并将其保存到变量中?

Joh*_*ler 595

使用Array.push()将任何内容放入数组中.

var a=[], b={};
a.push(b);    
// a[0] === b;
Run Code Online (Sandbox Code Playgroud)

关于数组的额外信息

一次添加多个项目

var x = ['a'];
x.push('b', 'c');
// x = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

将项添加到数组的开头

var x = ['c', 'd'];
x.unshift('a', 'b');
// x = ['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)

将一个数组的内容添加到另一个数组

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)
Run Code Online (Sandbox Code Playgroud)

从两个数组的内容创建一个新数组

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']
Run Code Online (Sandbox Code Playgroud)


Gab*_*aru 54

首先,没有objectarray.有ObjectArray.其次,你可以这样做:

a = new Array();
b = new Object();
a[0] = b;
Run Code Online (Sandbox Code Playgroud)

现在a将是一个b作为唯一元素的数组.

  • 对于最不复杂的答案,+1是+1.我在下面对其进行了扩展,以包含对OP问题2的回答. (4认同)

san*_*osh 54

var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.push({operator : i})
}
Run Code Online (Sandbox Code Playgroud)

这里数组年的价值就像

years[0]={operator:2015}
years[1]={operator:2016}
Run Code Online (Sandbox Code Playgroud)

它继续这样.


Aay*_*shi 23

使用ES6表示法,您可以执行以下操作:

对于追加,你可以像这样使用spread运算符:

var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);
Run Code Online (Sandbox Code Playgroud)


Bog*_*ann 19

  • JavaScript 区分大小写.调用new array()new object()将抛出ReferenceError,因为它们不存在.
  • new Array()由于其容易出错的行为,最好避免.
    而是分配新数组 = [val1, val2, val_n].对于对象,请使用= {}.
  • 扩展数组有很多种方法(如John的答案所示),但最安全的方法就是使用concat而不是push.concat返回一个新数组,保持原始数组不变.push改变应该避免的调用数组,特别是如果数组是全局定义的.
  • 冻结对象以及新数组也是一种很好的做法,以避免意外的突变.冻结的对象既不可变也不可扩展(浅).

应用这些点并回答你的两个问题,你可以定义一个这样的函数:

function appendObjTo(thatArray, newObj) {
  const frozenObj = Object.freeze(newObj);
  return Object.freeze(thatArray.concat(frozenObj));
}
Run Code Online (Sandbox Code Playgroud)

用法:

// 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.
Run Code Online (Sandbox Code Playgroud)

  • “用法”是我个人首选的答案。 (2认同)

ant*_*ove 16

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

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

/* store object into array */
aData[aData.length] = new Person("Java", "Script"); // aData[0]

aData.push(new Person("Jhon", "Doe"));
aData.push(new Person("Anna", "Smith"));
aData.push(new Person("Black", "Pearl"));

aData[aData.length] = new Person("stack", "overflow"); // aData[4]

/* loop array */
for (var i in aData) {
  alert(aData[i].fullname());
}

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

将对象推入数组


小智 12

您可以像这样使用 Spread 运算符 (...):

let arr = [{num: 1, char: "a"}, {num: 2, char: "b"}];

arr = [...arr,{num: 3, char: "c"}];

//...arr --> spread operator
console.log(arr);
Run Code Online (Sandbox Code Playgroud)


Meh*_*lal 9

通过推送,您甚至可以将多个对象添加到数组中

  let myArray = [];

   myArray.push(
              {name:"James", dataType:TYPES.VarChar, Value: body.Name},
              {name:"Boo", dataType:TYPES.VarChar, Value: body.Name},
              {name:"Alina", dataType:TYPES.VarChar, Value: body.Name}
             );
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 8

扩大Gabi Purcaru的答案,包括对2号的回答.

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

var c = a[0]; // c is now the object we inserted into a...
Run Code Online (Sandbox Code Playgroud)


Ray*_*nos 7

obejct显然是一个错字.但两者objectarray需要大写字母.

你可以使用短手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();
Run Code Online (Sandbox Code Playgroud)


小智 5

关于替代答案是这样的。

如果有这样的数组: var contacts = [bob, mary];

并且您想要在该数组中放置另一个数组,可以通过以下方式实现:

声明函数构造函数

function add (firstName,lastName,email,phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}
Run Code Online (Sandbox Code Playgroud)

通过函数创建对象:

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

并将对象添加到数组中:

contacts[contacts.length] = add1;
Run Code Online (Sandbox Code Playgroud)