Как нацелить объект, используя строку? [Дубликат]

1

Я пытаюсь использовать string для таргетинга на object

Изменить str = "abc"
Для abc


Что я имею

a = {
  b: {
    c: {
      d: 'working'
    }
  }
}

function go(o, v) {
  console.log(str[v])
}


str = "a.b.c" // reference to an object
go(str, "d")




Как он должен работать

a = {
  b: {
    c: {
      d: 'working'
    }
  }
}

function go(o, v) {
  console.log(a.b.c[v])
}


str = "a.b.c"
go(str, "d")
  • 0
    В любом случае, почему вы хотите это сделать? Это кажется бесполезным, поскольку вы можете просто использовать объектный синтаксис abcd .
Теги:

3 ответа

1
Лучший ответ

Вы можете разделить строку на "." а затем используйте функцию reduce() в результирующем массиве для итеративного сверления в ваш объект:

var a = {
      b: {
        c: {
          d: 'working'
        }
      }
    };

    function go(o, v) {
      return (o + "." + v).split(".").reduce((y,z) => y[z], this);
    }

    var result = go('a.b.c', 'd');
    console.log(result);
0

Вы хотите использовать библиотеку с именем object-path:

https://www.npmjs.com/package/object-path

Таким образом вы можете получить доступ к значению через:

str = "a.b.c" 
objectPath.get(a, str);
0

Вы можете попробовать использовать функцию eval()

https://www.w3schools.com/jsref/jsref_eval.asp

a = { b: { c: { d: 'working' } } }

function go(o, v) {
  console.log(eval(str)[v])
}

str = "a.b.c" 
go(str, "d")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню