一次更新多个数组元素
Updating multiple array elements at once Javascript
我试图在多维数组/对象中一次更新多个元素,并与。push和我尝试过的其他选项有错误。
var FEtypes= {
textTemplate: {
type :"Text",
size : 50,
required : "no",
FEadd : '<input>',
label : 'Label',
top : 0,
left : 0
},
textareaTemplate: {
type : "Textarea",
cols : 30,
rows : 5,
FEadd :'<textarea>'
}
}
这个可以工作,但是尝试在一行中完成。
FEtypes[1].left = someVariable1;
FEtypes[1].top = someVariable2;
我已经失败了:
FEtypes[1].push( {left:someVariable1, top:someVariable2} );
我一直得到一个错误,这不是一个函数或它不做任何事情。
FEtypes
是对象,而不是数组。Push
仅在阵列上可用。
如果你想把这个结构体存储在数组中,它看起来像这样:
var FEtypes= [
{type :"Text", size : 50, required : "no", FEadd :'<input>', label : 'Label', top : 0, left : 0},
{type : "Textarea", cols : 30, rows : 5,FEadd :'<textarea>' }
];
然后FEtypes[1].left = someVariable1;
FEtypes[1].top = someVariable2;
如果你想一次修改多个属性,jQuery的扩展函数可以满足你的需要:
$.extend(FEtypes[1], {left:someVariable1, top:someVariable2});
但是我觉得你原来的结构更合适。省略数组,然后这样做:
FEtypes.textareaTemplate.left = someVariable1;
FEtypes.textareaTemplate.top = someVariable2;
或者,同样,只有一行jQuery:
$.extend(FEtypes.textareaTemplate, {left:someVariable1, top:someVariable2});
FEtypes
是一个对象,它有两个属性textTemplate
和textareaTemplate
。它不是一个数组,也没有属性[1]
。因此,您不能使用.push()
或[1]
。
访问.left
和.top
参数或textareaTemplate属性的正确方法是:
FETypes.textareaTemplate.left = someVariable1;
FETypes.textareaTemplate.top = someVariable2;
或者对于textTemplate
,它将是:
FETypes.textTemplate.left = someVariable1;
FETypes.textTemplate.top = someVariable2;
textareaTemplate
和textTemplate
属性都是对象。如果您想替换整个对象(从而替换对象上的所有其他属性),您可以这样做:
FETypes.textTemplate = {left: someVariable1, top: someVariable1};
但是,当这样做的时候,你会替换整个textTemplate属性,所以它除了left
和top
之外没有其他属性。任何先前的属性,如size
或required
,都将被新的赋值所清除。
如果您只想更新left
和top
属性,而保留其他属性,则必须分别对它们进行赋值-除非您编写一个函数来这样做,否则没有快捷方式:
function updatePosition(obj, leftPos, topPos) {
obj.left = leftPos;
obj.top = topPos;
}
,然后像这样调用这个函数:
updatePosition(FETypes.textareaTemplate, someVariable1, someVariable2);
FEtypes
是否不是指向Array
实例。因此,它没有1
属性,而FEtypes[1]
的结果undefined
也没有任何属性。你的代码不能工作。查看错误控制台
尝试使用lodash或下划线:
_.chain(FEtypes).map(item => {
item.left = item.type === "Text" ? someVariable1 : item.left;
item.top = item.type === "Text" ? someVariable2 : item.top;
return item;
});
现代javascript
Object.assign(FEtypes[1], {
left: someVariable1,
top: someVariable2
})
// FEtypes[1].left = someVariable1;
// FEtypes[1].top = someVariable2;
- 在函数中添加数组元素的数值
- 访问JSON对象内部的数组元素
- Mongoose-在更新中删除数组元素
- javascript数组元素是否知道其封闭数组
- 将数组元素附加到FormData dos'不适用于Firefox 15
- 如何在javascript中使用click函数选择数组元素
- 如何在JavaScript中剥离数组元素中的非整数
- 消隐数组元素是否生成自己的属性
- 如何使一个Math.random数组元素比另一个数组元素更有可能被选中
- 在Codrops的内容中添加数组元素展开缩略图网格预览
- 如何使用Jquery水平打印表中的数组元素,并在某个元素之后垂直打印
- 如何访问数组中的数组元素(JavaScript)
- 正在更新挖空.js可观察数组元素值
- JavaScript 使用索引更新数组元素
- AngularJS:绑定到数组元素的数据;不适用于批量更新
- 使用新的数组元素更新backbone.js模型
- 为什么当数组更新时,引用数组元素的n't是我的对象
- 如何在knockoutjs中更新observable数组元素
- Object.assign以更新对象中的数组元素
- 更新Meteor集合中的数组元素