繁体   English   中英

一次更新多个数组元素Javascript

[英]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是一个对象,它有两个属性textTemplatetextareaTemplate 它不是数组,也没有属性[1] 因此,您不能使用.push()[1]

访问的正确方法.left.top参数或textareaTemplate属性是这样的:

FETypes.textareaTemplate.left = someVariable1;
FETypes.textareaTemplate.top = someVariable2;

或者对于textTemplate ,它将是这样的:

FETypes.textTemplate.left = someVariable1;
FETypes.textTemplate.top = someVariable2;

textareaTemplatetextTemplate属性都是对象。 如果你想替换整个对象(从而替换对象上的所有其他属性),你可以这样做:

FETypes.textTemplate = {left: someVariable1, top: someVariable1};

但是,这样做时,您将替换整个 textTemplate 属性,因此除了lefttop之外,它没有其他属性。 任何先前的属性(如sizerequired都将被新分配消除。

如果您只想更新lefttop属性而将其他属性保留在原位,则必须单独分配给它们 - 除非您编写这样的函数来执行此操作,否则没有捷径:

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属性,而undefinedFEtypes[1]的结果, FEtypes[1]没有属性。 您的代码没有,无法工作。 检查错误控制台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM