向现有数组添加对象会覆盖数值。

huangapple go评论156阅读模式
英文:

Adding object to existing array overwrites value

问题

我正在循环遍历两个数组并创建一个对象,我想将其添加到我的数据数组中。

在第一次迭代中,我得到

data: {
"raucher": "true"
}

在第二次迭代中,添加第二个对象后,我得到

data: {
"alter": "65",
"raucher": false <--- 为什么是false?
}

出了什么问题?

  1. var arr = new Array();
  2. for (var i = 0; i < componentsLength; i++) {
  3. var path = formComponentsArray[i].path;
  4. for (var z = 0; z < payloadLength; z++) {
  5. var fieldID = payload[z].fieldID.toLowerCase();
  6. if(path === fieldID) {
  7. var value = payload[z].value;
  8. var obj = {};
  9. obj[path] = value;
  10. arr["data"] = { ...obj };
  11. }
  12. }
  13. }
英文:

I'm looping through 2 arrays and create an object which I want to add to my array data.

In the first iteration I get

  1. data: {
  2. &quot;raucher&quot;: &quot;true&quot;
  3. }

After the second iteration and adding the 2nd object I get

  1. data: {
  2. &quot;alter&quot;: &quot;65&quot;,
  3. &quot;raucher&quot;: false &lt;--- why false?
  4. }

What's going wrong?

  1. var arr = new Array();
  2. for (var i = 0; i &lt; componentsLength; i++) {
  3. var path = formComponentsArray[i].path;
  4. for (var z = 0; z &lt; payloadLength; z++) {
  5. var fieldID = payload[z].fieldID.toLowerCase();
  6. if(path === fieldID) {
  7. var value = payload[z].value;
  8. var obj = {};
  9. obj[path] = value;
  10. arr[&quot;data&quot;] = { ...obj };
  11. }
  12. }
  13. }

答案1

得分: 2

以下是您要翻译的代码部分:

这部分代码有问题

  1. if(path === fieldID) {
  2. var value = payload[z].value;
  3. var obj = {};
  4. obj[path] = value;
  5. arr["data"] = { ...obj };
  6. }

你正在破坏arr["data"]的整体,并将其替换为只能有一个键的对象。

你能看到上面的写法与下面的写法在效果上是相同的吗?

  1. if(path === fieldID) {
  2. arr["data"] = { [path]: payload[z].value };
  3. }

你是不是想要这样?

  1. if(path === fieldID) {
  2. arr["data"][path] = payload[z].value;
  3. }
英文:

This segment of your code is wrong

  1. if(path === fieldID) {
  2. var value = payload[z].value;
  3. var obj = {};
  4. obj[path] = value;
  5. arr[&quot;data&quot;] = { ...obj };

You are destroying the whole of arr[&quot;data&quot;] and replacing it with an object that can only have one key.

Can you see that what is written above is identical in effect to:

  1. if(path === fieldID) {
  2. arr[&quot;data&quot;] = { [path]:payload[z].value };
  3. }

Did you mean this?

  1. if(path === fieldID) {
  2. arr[&quot;data&quot;][path] = payload[z].value ;
  3. }

huangapple
  • 本文由 发表于 2023年3月9日 21:23:28
  • 转载请务必保留本文链接:https://go.coder-hub.com/75685210.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定