Это мой первый вопрос на форуме. Я много искал, прежде чем спросить вас, ребята, но, возможно, из-за того, что я все еще развиваю свои навыки JavaScript, я не мог этого понять.
Я пытаюсь передать объект в качестве аргумента динамически в соответствии с URL-адресом, как показано ниже.
let createDataLayer = () => {
//Creating objects with the values for each page
someurl = {
pageType: 'Content',
institution: 'Institution',
contentTopic: 'Membership',
productCategory: '',
productName: '',
};
//Attaching the right array to the actual url
let actualURL = "/some-url/";
actualURL = actualURL.replace(/-/g,"");
actualURL = actualURL.replace(///g,"");
//Function that applies the right content to the right page
let applyingContent = (variable) => {
console.info("Always come as string: ", typeof variable); //string
console.info("Can't access the object: ", variable.pageType); //undefined
console.info("If I call the variable itself, it's here: ", someurl); //the object logs ok
window.dataLayerValues = [variable.pageType, variable.institution, variable.contentTopic, variable.productCategory, variable.productName];
return window.dataLayerValues;
}
applyingContent(actualURL);
}
createDataLayer();
Кто-нибудь может мне помочь?
Я очень это ценю!
Привет, Эле, спасибо за ответ. Как я могу получить эту строку и передать ее как имя объекта, чтобы я вызвал объект, а не строку внутри функции applyContent?
Кажется, вы назначаете some-url как строку значения "/ some-url /" в actualURL, которая затем передается в applyContent (). Вам нужно будет передать кого-нибудь в качестве объекта функции applyContent (), чтобы использовать ее внутренние значения.
Доступ к переменным через строки, хранящиеся в других переменных, обычно не выполняется в javascript. Ваш код обычно не должен заботиться о названии переменной. Если вам нужно организовать данные так, чтобы вы могли получить к ним доступ с помощью строкового ключа, вы должны использовать объект с ключами, соответствующими строкам. Это выглядело бы примерно так:
const urls = {
someurl: {
pageType: 'Content',
institution: 'Institution',
contentTopic: 'Membership',
productCategory: '',
productName: '',
}
}
Затем вы получаете доступ к данным с помощью urls[key]
, где key
- ваша строка.
Затем вы можете использовать его только с несколькими изменениями в вашем коде:
let createDataLayer = () => {
//Creating objects with the values for each page
const urls = {
someurl: {
pageType: 'Content',
institution: 'Institution',
contentTopic: 'Membership',
productCategory: '',
productName: '',
}
}
//Attaching the right array to the actual url
let actualURL = "/some-url/";
actualURL = actualURL.replace(/-/g,"");
actualURL = actualURL.replace(///g,"");
//Function that applies the right content to the right page
let applyingContent = (variable) => {
console.info("Strill a string: ", typeof variable); //string
// object accessed with key: urls[variable]
console.info("Can access the object: ", urls[variable].pageType); //undefined
return urls[variable];
}
applyingContent(actualURL);
}
createDataLayer();
Это позволит сохранить все ваши данные аккуратно упакованными в один объект, вместо того, чтобы иметь отдельные переменные повсюду. Вы можете передавать этот объект, изменять его и т. д.
Спасибо, Эле! Вы дали мне нужные направления! Поэтому я просто спросил Google «Преобразовать строку в JavaScript с именем переменной». Ответ: мне нужно было использовать функцию eval () для моей строки, прежде чем передавать ее в аргумент. Вот самый простой способ сделать то, что мне нужно:
let createDataLayer = () => {
//Creating objects with the values for each page
someurl = {
pageType: 'Content',
institution: 'Institution',
contentTopic: 'Membership',
productCategory: '',
productName: '',
};
//Attaching the right array to the actual url
let actualURL = "/some-url/";
actualURL = actualURL.replace(/-/g,"");
actualURL = actualURL.replace(///g,"");
actualURL = eval(actualURL);//This is the line I needed =)
//Function that applies the right content to the right page
let applyingContent = (variable) => {
console.info("Always come as string: ", variable.pageType); //string
console.info("Can't access the object: ", variable.pageType); //undefined
console.info("If I call the variable itself, it's here: ", someurl); //the object logs ok
window.dataLayerValues = [variable.pageType, variable.institution, variable.contentTopic, variable.productCategory, variable.productName];
return window.dataLayerValues;
}
applyingContent(actualURL);
}
createDataLayer();
Большое спасибо за то, что указали мне правильный путь, @Ele. Спасибо вам всем!
Но вы передаете
actualURL
, который является строкой. Чего ожидать?