我该如何在 JavaScript 或 jQuery 中向数组添加一个对象?举个例子,这段代码有什么问题?
function() {
var a = new array();
var b = new object();
a[0] = b;
}
我想使用这段代码将许多对象保存在function1的数组中,并调用function2来使用数组中的对象。
- 如何将对象保存在数组中?
- 如何将对象放入数组并将其保存到变量中?
我该如何在 JavaScript 或 jQuery 中向数组添加一个对象?举个例子,这段代码有什么问题?
function() {
var a = new array();
var b = new object();
a[0] = b;
}
我想使用这段代码将许多对象保存在function1的数组中,并调用function2来使用数组中的对象。
使用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']
var years = [];
for (i= 2015;i<=2030;i=i+1){
years.push({operator : i})
}
这里的数组years的值如下:
years[0]={operator:2015}
years[1]={operator:2016}
它就这样继续下去。
首先,不存在object
或array
。存在的是Object
和Array
。其次,你确实可以这样做:
a = new Array();
b = new Object();
a[0] = b;
现在a
将是一个数组,其唯一的元素为b
。
使用ES6
语法,可以像这样做:
要进行追加操作,可以使用展开运算符,如下所示:
var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);
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.
freeze
)只是防止意外变异的额外步骤。 - Boghyon Hoffmann/* array literal */
var aData = [];
/* object constructur */
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
this.fullname = function() {
// return (this.firstname + " " + this.lastname);
return (`${this.firstname} ${this.lastname}`); // es6 template string
};
}
/* store object into array */
aData[aData.length] = new Person("Java", "Script"); // aData[0]
aData.push(new Person("John", "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);
使用 push 方法,您甚至可以将多个对象添加到数组中。
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}
);
let arr = [{num: 1, char: "a"}, {num: 2, char: "b"}];
arr = [...arr,{num: 3, char: "c"}];
//...arr --> spread operator
console.log(arr);
扩展Gabi Purcaru的答案,包括对第二个问题的回答。
a = new Array();
b = new Object();
a[0] = b;
var c = a[0]; // c is now the object we inserted into a...
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();
push
方法。请不要再通过提出push
建议来污染本讨论串。请理解为否定推荐push
方法。 - Boghyon Hoffmann