我该如何在 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来使用数组中的对象。
另一种答案是这个。
如果你有一个像这样的数组: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;
a=[];
a.push(['b','c','d','e','f']);
var list = [];
function saveToArray(x) {
list.push(x);
};
function newObject () {
saveToArray(this);
};
今天2020.12.04,我在Chrome v86、Safari v13.1.2和Firefox v83上对选择的解决方案在MacOs HighSierra 10.13.6上进行了测试。
对于所有浏览器:
length
(B)的原地解决方案在小数组中最快,在Firefox中也适用于大数组,在Chrome和Safari中速度较快push
(A)的原地解决方案在Chrome和Safari上适用于大数组,在Firefox和小数组上速度也很快我进行了2个测试案例:
下面的代码段介绍了解决方案之间的差异:A、B、C、D、E、F
PS:答案B已被删除-但实际上它是第一个使用这种技术的答案,因此如果您有权限查看它,请单击“取消删除”。
// https://dev59.com/5G025IYBdhLWcg3wChOc#6254088
function A(a,o) {
a.push(o);
return a;
}
// https://stackoverflow.com/a/47506893/860099
function B(a,o) {
a[a.length] = o;
return a;
}
// https://dev59.com/5G025IYBdhLWcg3wChOc#6254088
function C(a,o) {
return a.concat(o);
}
// https://dev59.com/5G025IYBdhLWcg3wChOc#50933891
function D(a,o) {
return [...a,o];
}
// https://dev59.com/5G025IYBdhLWcg3wChOc#42428064
function E(a,o) {
const frozenObj = Object.freeze(o);
return Object.freeze(a.concat(frozenObj));
}
// https://dev59.com/5G025IYBdhLWcg3wChOc#6254088
function F(a,o) {
a.unshift(o);
return a;
}
// -------
// TEST
// -------
[A,B,C,D,E,F].map(f=> {
console.log(`${f.name} ${JSON.stringify(f([1,2],{}))}`)
})
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"> </script>
This shippet only presents functions used in performance tests - it not perform tests itself!
以下是chrome的示例结果
var a = new Array();
var b = new Object();
function first() {
a.push(b);
// Alternatively, a[a.length] = b
// both methods work fine
}
function second() {
var c = a[0];
}
// code
first();
// more code
second();
// even more code
push
方法。请不要再通过提出push
建议来污染本讨论串。请理解为否定推荐push
方法。 - Boghyon Hoffmann