根据键值对条件动态地将对象推入嵌套数组
dynamically push object into nested array based on key,value pair condition
我有以下对象:
{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}
我想修改它,将这个对象 {type=map, map=[{key=fieldName, value=cookieExpires, type=template}, {key=value, value=33696000, type=template}]}
添加到键为 fieldsToSet
的嵌套对象中。
到目前为止,我已经尝试过类似的方法,但它不起作用:
element.parameter.filter(obj => { return obj.key === "fieldsToSet" }).push(newObject);
我需要一些动态的东西,因为对象和数组的数量总是在变化。
我相信你的目标如下。
- 您想使用 Google Apps 脚本将
newObject
添加到 element.parameter[]
。
修改点:
- 在您的脚本中,
element.parameter.filter(obj => { return obj.key === "fieldsToSet" })
returns 对象包括 obj.key === "fieldsToSet"
。这样,当 push(newObject)
用于此时, newObject
将添加到检索到的元素中。我认为这可能是您遇到问题的原因。
在这个回答中,我想提出以下修改脚本。在此示例脚本中,我将您的值转换为 JSON 对象,因为我认为您的示例值可能直接从具有 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
是从您问题中的示例值转换而来的。所以当我的转换不正确时,请修改或替换为您的实际值。
例如在element.parameter[].list[]
中添加newObject
时,可以使用如下脚本
element.parameter.forEach(obj => {
if (obj.key === "fieldsToSet") {
obj.list.push(newObject);
}
});
参考文献:
我有以下对象:
{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}
我想修改它,将这个对象 {type=map, map=[{key=fieldName, value=cookieExpires, type=template}, {key=value, value=33696000, type=template}]}
添加到键为 fieldsToSet
的嵌套对象中。
到目前为止,我已经尝试过类似的方法,但它不起作用:
element.parameter.filter(obj => { return obj.key === "fieldsToSet" }).push(newObject);
我需要一些动态的东西,因为对象和数组的数量总是在变化。
我相信你的目标如下。
- 您想使用 Google Apps 脚本将
newObject
添加到element.parameter[]
。
修改点:
- 在您的脚本中,
element.parameter.filter(obj => { return obj.key === "fieldsToSet" })
returns 对象包括obj.key === "fieldsToSet"
。这样,当push(newObject)
用于此时,newObject
将添加到检索到的元素中。我认为这可能是您遇到问题的原因。
在这个回答中,我想提出以下修改脚本。在此示例脚本中,我将您的值转换为 JSON 对象,因为我认为您的示例值可能直接从具有 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
是从您问题中的示例值转换而来的。所以当我的转换不正确时,请修改或替换为您的实际值。例如在
element.parameter[].list[]
中添加newObject
时,可以使用如下脚本element.parameter.forEach(obj => { if (obj.key === "fieldsToSet") { obj.list.push(newObject); } });