如何将对象属性值对应赋值给数组对象的value属性?
解决对象数组与对应对象属性值的一一赋值问题
你的代码之所以达不到预期,核心问题是两层forEach嵌套的逻辑错误:外层遍历dataForm的每个元素时,内层又把formObject的所有属性值挨个赋值给当前元素的value——这就导致每个el.value会被反复覆盖,最终所有元素的value都会变成formObject的最后一个属性值,自然和你想要的一一对应效果不符。
这里给你两种简洁的解决方案:
方案一:利用forEach的索引直接匹配(修改原数组)
因为dataForm的长度和formObject的属性数量完全一致,我们可以先把formObject的属性值提取成数组,再通过索引一一对应赋值:
// 提取formObject的所有属性值为数组 const formValues = Object.values(formObject); // 遍历dataForm,用索引匹配赋值 this.dataForm.forEach((item, index) => { item.value = formValues[index]; });
方案二:用map生成新数组(不修改原对象)
如果你不想直接修改原数组的元素,而是生成一个新的数组,可以用map方法:
const formValues = Object.values(formObject); const updatedDataForm = this.dataForm.map((item, index) => { // 拷贝原对象并更新value属性 return { ...item, value: formValues[index] }; }); // 替换原数组(如果需要的话) this.dataForm = updatedDataForm;
这两种方案都能实现你想要的效果:dataForm中第n个元素的value会被赋值为formObject中第n个属性的值,完美匹配你的预期结果。
内容的提问来源于stack exchange,提问作者Mike Kylmä Lampi
相关产品推荐
相关产品推荐

