使用对象的副本创建数组(Javascript)
Creating an array with copy of object (Javascript)
我正在尝试编写一个"通用"数组填充器,用给定的对象填充数组。我用javascript模拟了一个类,现在我想写一个函数,用该类的类型填充数组
function fillArray(theArrayToFill,amount,theObject) {
for ( var i = 0; i != amount; ++i )
{theArrayToFill.push(theObject);}
}
但是填充数组(数组,3,新敌人(0,0));用对对象"敌人"的引用填充数组,这不是我想要的,我想要一个精确的副本,但当我改变对象0时,对象2可能不会改变。
请帮助感谢
我建议您向对象添加一个克隆方法。clone方法应该创建一个新对象,并通过复制当前对象来设置其值,然后该方法返回这个新对象。
示例:
function clone(obj)
{
var newObj = new YourObject();
newObj.setName(obj.getName());
//Do this for every properties
return newObj;
}
如果您使用Underscore,它提供了一个克隆助手函数。
function fillArray(theArrayToFill,amount,theObject) {
for ( var i = 0; i != amount; ++i )
{theArrayToFill.push(_.clone(theObject));}
}
由于您已经有了构造函数,下面是如何使用它:
function fillArray(theArrayToFill,amount,ctor) {
for ( var i = 0; i != amount; ++i ) {
theArrayToFill.push(new ctor(0,0));
}
}
// usage:
fillArray(theArray,3,Enemy);
按照最初调用fillArray方法的方式,创建了一个对象(紧接在调用函数之前),并将其作为参数传递给fillArray。然后,该方法继续在数组中填充对该对象的引用,这样数组中的每个项都会指向同一个对象。
编辑:如果您想将不同的参数传递给构造函数,则不会想到简单的解决方案。这里有一个可能足够你使用的技巧:
function fillArray(theArrayToFill,amount,ctor) {
for ( var i = 0; i != amount; ++i ) {
theArrayToFill.push(new ctor(arguments[3], arguments[4], arguments[5],
arguments[6], arguments[7], arguments[8], arguments[9], arguments[10],
arguments[11], arguments[12], arguments[13], arguments[14]));
}
}
// usage:
fillArray(theArray,3,Enemy,0,0);
fillArray(theArray,3,Friend,1,2,3,4,5,6,7,8);
显然,这只适用于参数少于12个的构造函数,并且基于构造函数中使用的参数的一些检查也会失败,但它可以完成任务。
附言:我不建议你用这种方法。看起来克隆方法更适合您的目的。
您可以使用Object.create()
function fillArray(theArrayToFill,amount,theObject) {
for ( var i = 0; i != amount; ++i ) {
theArrayToFill.push(Object.create(theObject));
}
}
或者,如果你想返回新的数组填充默认值,你可以使用下一个代码
function fillArray(amount,theObject) {
return Array.apply(null,Array(amount)).map(function(_){return Object.create(theObject);});
}
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript