簡體   English   中英

根據鍵值對條件動態將 object 推入嵌套數組

[英]dynamically push object into nested array based on key,value pair condition

我有以下 object:

{type=stuff, name=blablabla, variableId=x, fingerprint=xxxx, containerId=xxxx, accountId=xxxx, workspaceId=xxx, path=accounts/xxxx/containers/xxxx/workspaces/xx/variables/x, parentFolderId=x, parameter=[{value=auto, type=template, key=xxxxx}, {type=boolean, key=asdasdf, value=false}, {value=false, type=boolean, key=adasdasd}, {type=boolean, value=false, key=asdasdasd}, {type=list, key=fieldsToSet, list=[{map=[{value=asdasdas, type=template, key=asdasdas}, {value=asdasdas, type=template, key=value}], type=map}, {type=map, map=[{type=template, value=page, key=fieldName}, {type=template, key=value, value=asdasdasd}]}]}, {value=false, type=boolean, key=asdasd}, {type=boolean, value=false, key=asdasdasd}, {value=false, type=boolean, key=adasdasd}, {key=dimension, type=list, list=[{type=map, map=[{value=2, key=index, type=template}, {value=asdasd, type=template, key=dimension}]}, {type=map, map=[{value=3, type=template, key=index}, {value=asdasdasd, type=template, key=dimension}]}, {map=[{type=template, value=4, key=index}, {key=dimension, type=template, value=asdasdasd / asdasdasd}], type=map}, {map=[{type=template, value=5, key=index}, {value=asdasd, type=template, key=dimension}], type=map}, {type=map, map=[{value=6, type=template, key=index}, {key=dimension, type=template, value=asdasdasd}]}, {map=[{type=template, key=index, value=7}, {value=asdasd, type=template, key=dimension}], type=map}, {type=map, map=[{key=index, value=8, type=template}, {value=asdasdasd, key=dimension, type=template}]}]}, {key=enableEcommerce, type=boolean, value=false}, {value=asdasdasd, type=template, key=asdasdasd}], tagManagerUrl=https://blabla.com/#/asdasd/accounts/asdasd/containers/xxxxx/workspaces/xxxx/variables/x?apiLink=variable}

我想修改它並將這個 object {type=map, map=[{key=fieldName, value=cookieExpires, type=template}, {key=value, value=33696000, type=template}]}添加到嵌套的 object與關鍵fieldsToSet

到目前為止,我已經嘗試過這樣的事情,但它不起作用:

element.parameter.filter(obj => { return obj.key === "fieldsToSet" }).push(newObject);

我需要一些動態的東西,因為 object 和 arrays 的數量總是在變化。

我相信你的目標如下。

  • 您想使用 Google Apps 腳本將newObject添加到element.parameter[]

修改點:

  • 在您的腳本中, element.parameter.filter(obj => { return obj.key === "fieldsToSet" })返回 object 包括obj.key === "fieldsToSet" 這樣,當push(newObject)用於此時, newObject被添加到檢索到的元素中。 我認為這可能是您的問題的原因。

在這個答案中,我想提出以下修改后的腳本。 在此示例腳本中,我將您的值轉換為 JSON object 因為我認為您的示例值可能直接從 object 與Logger.log獲得。

修改后的腳本:

 var element = {"type":"stuff","name":"blablabla","variableId":"x","fingerprint":"xxxx","containerId":"xxxx","accountId":"xxxx","workspaceId":"xxx","path":"accounts/xxxx/containers/xxxx/workspaces/xx/variables/x","parentFolderId":"x","parameter":[{"value":"auto","type":"template","key":"xxxxx"},{"type":"boolean","key":"asdasdf","value":false},{"value":false,"type":"boolean","key":"adasdasd"},{"type":"boolean","value":false,"key":"asdasdasd"},{"type":"list","key":"fieldsToSet","list":[{"map":[{"value":"asdasdas","type":"template","key":"asdasdas"},{"value":"asdasdas","type":"template","key":"value"}],"type":"map"},{"type":"map","map":[{"type":"template","value":"page","key":"fieldName"},{"type":"template","key":"value","value":"asdasdasd"}]}]},{"value":false,"type":"boolean","key":"asdasd"},{"type":"boolean","value":false,"key":"asdasdasd"},{"value":false,"type":"boolean","key":"adasdasd"},{"key":"dimension","type":"list","list":[{"type":"map","map":[{"value":2,"key":"index","type":"template"},{"value":"asdasd","type":"template","key":"dimension"}]},{"type":"map","map":[{"value":3,"type":"template","key":"index"},{"value":"asdasdasd","type":"template","key":"dimension"}]},{"map":[{"type":"template","value":4,"key":"index"},{"key":"dimension","type":"template","value":"asdasdasd / asdasdasd"}],"type":"map"},{"map":[{"type":"template","value":5,"key":"index"},{"value":"asdasd","type":"template","key":"dimension"}],"type":"map"},{"type":"map","map":[{"value":6,"type":"template","key":"index"},{"key":"dimension","type":"template","value":"asdasdasd"}]},{"map":[{"type":"template","key":"index","value":7},{"value":"asdasd","type":"template","key":"dimension"}],"type":"map"},{"type":"map","map":[{"key":"index","value":8,"type":"template"},{"value":"asdasdasd","key":"dimension","type":"template"}]}]},{"key":"enableEcommerce","type":"boolean","value":false},{"value":"asdasdasd","type":"template","key":"asdasdasd"}],"tagManagerUrl":"https://blabla.com/#/asdasd/accounts/asdasd/containers/xxxxx/workspaces/xxxx/variables/x?apiLink=variable"}; var newObject = {"type":"map","map":[{"key":"fieldName","value":"cookieExpires","type":"template"},{"key":"value","value":33696000,"type":"template"}]}; element.parameter.forEach(({key},_,a) => { if (key === "fieldsToSet") { a.push(newObject); } }); console.log(element);

筆記:

  • 以上element的樣本值是從您問題中的樣本值轉換而來的。 因此,當我的轉換不正確時,請修改或替換為您的實際值。

  • 例如,將newObject添加到element.parameter[].list[]時,可以使用以下腳本。

     element.parameter.forEach(obj => { if (obj.key === "fieldsToSet") { obj.list.push(newObject); } });

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM