Передача родительского объекта динамически для работы в качестве аргумента в javascript

Это мой первый вопрос на форуме. Я много искал, прежде чем спросить вас, ребята, но, возможно, из-за того, что я все еще развиваю свои навыки 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();

Кто-нибудь может мне помочь?

Я очень это ценю!

Но вы передаете actualURL, который является строкой. Чего ожидать?

Ele 27.10.2018 16:50

Привет, Эле, спасибо за ответ. Как я могу получить эту строку и передать ее как имя объекта, чтобы я вызвал объект, а не строку внутри функции applyContent?

Mike Dougllas 27.10.2018 17:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
232
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Кажется, вы назначаете 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. Спасибо вам всем!

Другие вопросы по теме