一次更新多个数组元素

Updating multiple array elements at once Javascript

本文关键字:数组元素 更新 一次      更新时间:2023-09-26

我试图在多维数组/对象中一次更新多个元素,并与。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);

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;