Я пытаюсь вернуть все ключи моего объекта, чтобы создать строку заголовка в скрипте Google Apps. Это то, что возвращается, когда я console.info(obj):
{tagId=270, accountId=XXXXX, monitoringMetadata = {type=map}, firingTriggerId=[18], type=sp, containerId=XXXXX, workspaceId=XXXXX, name=GADR - Product Detail View - Product Detail Page, tagManagerUrl=https://tagmanager.google.com/#/container/accounts/XXX/containers/XXX/workspaces/XXX/tags/270?apiLink=tag, parameter=[{value = {{CJ - GADR SKU - Product Detail Page}}, type=template, key=eventItems}, {type=template, key=eventValue, value = {{DLV - Product Price - Product Detail Pages}}}, {value=true, key=enableDynamicRemarketing, type=boolean}, {type=list, key=customParams, list=[{map=[{type=template, key=key, value=product_name}, {key=value, type=template, value = {{DLV - Product Name - Product Detail Pages}}}], type=map}, {type=map, map=[{value=product_price, type=template, key=key}, {key=value, type=template, value = {{DLV - Product Price - Product Detail Pages}}}]}, {map=[{type=template, key=key, value=product_id}, {value = {{DLV - Product ID - Product Detail Pages}}, type=template, key=value}], type=map}, {map=[{value=product_category, type=template, key=key}, {value = {{DLV - Product Category - Product Detail Pages}}, key=value, type=template}], type=map}, {type=map, map=[{value=user_id, key=key, type=template}, {value = {{DLV - User ID - All Pages}}, type=template, key=value}]}, {map=[{value=user_status, type=template, key=key}, {type=template, value = {{DLV - User Status - All Pages}}, key=value}], type=map}, {type=map, map=[{value=page_type, type=template, key=key}, {key=value, value = {{DLV - Page Type - All Pages}}, type=template}]}, {map=[{type=template, value=user_purchase_count, key=key}, {key=value, type=template, value = {{DLV - User Purchase Count - All Pages}}}], type=map}, {type=map, map=[{value=user_lifetime_value, type=template, key=key}, {key=value, value = {{DLV - User Lifetime Value - All Pages}}, type=template}]}]}, {type=template, value=view_item, key=eventName}, {type=template, value = {{CST - Google Ads ID - All Pages}}, key=conversionId}, {type=template, value=USER_SPECIFIED, key=customParamsFormat}, {key=rdp, value=false, type=boolean}], tagFiringOption=oncePerEvent, path=accounts/XXX/containers/XXXX/workspaces/XXXX/tags/270, fingerprint=1608071670124}
И это то, что выводится, когда я console.info(Object.keys(obj));
[setMonitoringMetadataTagNameKey, setName, setTagFiringOption, setNotes, getMonitoringMetadata, tagId, firingTriggerId, getSetupTag, getFiringTriggerId, getName, name, getTagFiringOption, getParentFolderId, setWorkspaceId, containerId, getFingerprint, getTagManagerUrl, parameter, getBlockingTriggerId, setLiveOnly, setFingerprint, setTagManagerUrl, getContainerId, setScheduleEndMs, setTagId, getPaused, path, setContainerId, getLiveOnly, setFiringTriggerId, getBlockingRuleId, getFiringRuleId, getTagId, setTeardownTag, getTeardownTag, setFiringRuleId, getType, getPriority, accountId, setPaused, monitoringMetadata, setScheduleStartMs, getNotes, setParameter, toString, setParentFolderId, getPath, setSetupTag, fingerprint, setAccountId, getAccountId, workspaceId, setBlockingTriggerId, type, tagFiringOption, tagManagerUrl, getMonitoringMetadataTagNameKey, setPriority, setType, getScheduleEndMs, setBlockingRuleId, setPath, getParameter, getWorkspaceId, getScheduleStartMs, setMonitoringMetadata]
Я получаю все эти дополнительные ключи, которые начинаются с set и получают, которых нет в объекте, и я не могу понять, почему.
Эти ключи существуют в объекте, и поэтому они отображаются, когда эти ключи извлекаются с помощью Object.keys()
. console.info()
в Apps Script пытается преобразовать объект в строку (хотя и странным/нестандартным способом из-за пользовательской реализации в сценарии приложений), а stringify исключает функции, и поэтому они не отображаются, когда сценарий напрямую регистрируется с использованием console.info()
.
Вы можете перебрать объект и отфильтровать эти функции:
const keysWithoutFunctions = Object.keys(obj).filter(key => typeof obj[key] !== 'function')
Это сделало это! Это странно, потому что этих функциональных клавиш нет в документации Диспетчера тегов Google. Любой способ увидеть, что на самом деле содержит объект, включая все функции?
@ Джордж Разве ты еще не видел это? Используете Object.keys()
? Также смотрите developer.mozilla.org/en-US/docs/…
Я вижу ключи, но не данные, связанные с этими ключами. Этих ключей нет в документации GTM, поэтому я не знаю, что это такое и зачем они там.
@ Джордж Это функции. Вы можете получить доступ к методу, используя object[key]
, но вы все равно не сможете увидеть исходный код функции (хотя вы можете выполнить функцию: object[key](argument)
). Судя по именам, они "геттеры и сеттеры".
Где ваш минимально воспроизводимый пример?