我试图在多维数组/对象中一次更新多个元素,并且我尝试过.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} );
我一直收到一个错误,这不是一个函数,或者什么也没做。
答案 0 :(得分:5)
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函数将为您提供所需的内容:
$.extend(FEtypes[1], {left:someVariable1, top:someVariable2});
但我认为你的原始结构更合适。只是放弃阵列,并执行此操作:
FEtypes.textareaTemplate.left = someVariable1;
FEtypes.textareaTemplate.top = someVariable2;
或者,再一次,jQuery只有一行:
$.extend(FEtypes.textareaTemplate, {left:someVariable1, top:someVariable2});
答案 1 :(得分:2)
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);
答案 2 :(得分:0)
FEtypes
不会引用Array
个实例。因此,它没有1
属性,undefined
,FEtypes[1]
的结果根本没有属性。你的代码没有,不能工作。检查错误控制台。
答案 3 :(得分:0)
使用lodash或下划线尝试:
_.chain(FEtypes).map(item => {
item.left = item.type === "Text" ? someVariable1 : item.left;
item.top = item.type === "Text" ? someVariable2 : item.top;
return item;
});