我正在嘗試在數(shù)組中插入新的鍵,這些鍵基本上是從父數(shù)組中提取的。我找不到僅僅通過(guò)將新密鑰插入到提取的數(shù)組中就會(huì)導(dǎo)致商店內(nèi)的主數(shù)組發(fā)生變化的原因。
這是我嘗試在自訂數(shù)組中新增鍵值對(duì)的方法
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();
以下是輸出:
控制臺(tái) 1.:newArray
[{"name":"base_url","inputType":"textField","value":"base_url"},{"name":"hash_key","inputType":"textField","value":"hash_key"}]
控制臺(tái) 2.:父數(shù)組
[{"integrationTypeId":1,"type":"aptus","fields":[{"name":"base_url","inputType":"textField","value":"base_url"},{"name":"hash_key","inputType":"textField","value":"hash_key"}]}]
是什麼讓它用 newArray 值進(jìn)行修改。
甚至嘗試過(guò): newArray.map(obj => ({ ...obj, [inputType]: "textField"}));
重要的是要知道 Javascript 陣列和物件是透過(guò)引用傳遞的。這表示如果您修改數(shù)組或?qū)ο?,它將反映在?duì)該數(shù)組或?qū)ο蟮乃幸弥小?
在這種情況下,陣列-->物件-->陣列-->物件嵌套過(guò)多。因此,在提取時(shí)請(qǐng)確保建立一個(gè)新的陣列或物件。這裡我使用 ES6 ...
語(yǔ)法來(lái)建立一個(gè)新的陣列/物件。只需使用 =
即可複製其引用,從而反映變更。
下面的程式碼尚未優(yōu)化,但我希望您明白這一點(diǎn)。
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();