[英]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);
使用 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;
FEtypes
并不是指一个Array
实例。 结果,它没有1
属性,而undefined
是FEtypes[1]
的结果, FEtypes[1]
没有属性。 您的代码没有,无法工作。 检查错误控制台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.