ReactJs: Mein übergeordnetes Array wird nach Verwendung der Kartenfunktion aktualisiert
P粉208286791
P粉208286791 2024-04-03 20:04:17
0
1
348

Ich versuche, neue Schlüssel in ein Array einzufügen, die im Wesentlichen aus dem übergeordneten Array extrahiert werden. Ich kann keinen Grund finden, warum sich das Hauptarray im Speicher ändern würde, indem einfach ein neuer Schlüssel in das extrahierte Array eingefügt wird.

So versuche ich, neue Schlüssel-Wert-Paare in einem benutzerdefinierten Array hinzuzufügen

const array = [{"integrationTypeId":1,"type":"aptus","fields":[{"name":"base_url"},{"name":"hash_key"}]}]

function runArray(){
let connectorObject= {}
let newArray
if (array.length > 0) {
                connectorObject =
                    array.find(
                        (c) => c.integrationTypeId === 1,
                    );
                newArray = connectorObject.fields
                newArray !== undefined &&
                    newArray.map((object) => {
                        return Object.assign(object, {
                            inputType: "textField",
                            value: object.name,
                        })
                    })
            }
            console.log(JSON.stringify(newArray))
            console.log(JSON.stringify(array))
}

runArray();

Das Folgende ist die Ausgabe:

Konsole 1.: newArray

[{"name":"base_url","inputType":"textField","value":"base_url"},{"name":"hash_key","inputType":"textField","value":"hash_key"}]

Konsole 2.: Übergeordnetes Array

[{"integrationTypeId":1,"type":"aptus","fields":[{"name":"base_url","inputType":"textField","value":"base_url"},{"name":"hash_key","inputType":"textField","value":"hash_key"}]}]

Was macht es mit dem Wert newArray geändert?

Sogar versucht: newArray.map(obj => ({ ...obj, [inputType]: "textField"}));

P粉208286791
P粉208286791

Antworte allen(1)
P粉141455512

重要的是要知道 Javascript 数组和对象是通过引用传递的。这意味着如果您修改数组或对象,它将反映在对该数组或对象的所有引用中。

在这种情况下,数组-->对象-->数组-->对象嵌套过多。因此,在提取时请确保创建一个新的数组或对象。这里我使用 ES6 ... 语法来创建一个新的数组/对象。只需使用 = 即可复制其引用,从而反映更改。

下面的代码尚未优化,但我希望您明白这一点。

const array = [
  {
    integrationTypeId: 1,
    type: "aptus",
    fields: [{ name: "base_url" }, { name: "hash_key" }],
  },
];

function runArray() {
  let connectorObject = {};
  let newArray = [];

  if (array.length > 0) {
    connectorObject = {
      ...array.find((c) => c.integrationTypeId === 1), //Creating brand new copy of array object
      fields: [...array.find((c) => c.integrationTypeId === 1).fields], //Creating brand new copy of fields array
    };

    newArray = connectorObject.fields.map((field) => {  //Creating brand new copy of fields array object
      return { ...field };
    });

    newArray.map((object) => {
      Object.assign(object, {
        inputType: "textField",
        value: object.name,
      });
    });
  }
  console.log(JSON.stringify(newArray));
  console.log(JSON.stringify(array));
}

runArray();
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!