@yankoyski

Как получить свойство goal передав параметр в функцию f?

let x = {
        a: {
            goal: 1,
            b: 2,
        },
        c: 3
    };


    function f(elem) {
        console.log(x[elem]);
    }
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Значит, на вход подается строка, где через точку перечислен путь к вложенному свойству, и объект:
f( "a.goal", x)

Можно сделать через рекурсию. На каждом «шаге» функция путь обрабатывает самый левый кусок цепочки. Для "a.goal" это будет "a". Нужно проверить, есть ли такое свойство у объекта. И если есть, то вернуть вызов этой же функции, но цепочка уже короче, остается только "goal" и объект не x, а x.a:
var x = {
  a: {
    goal: 1,
    b: 2,
  },
  c: 3
};


function f(value, chain) {
  if(chain.length === 0) return value;
  
  const propsArray = chain.split('.'); // "a.goal" => ["a", "goal"]
  const property = propsArray[0];
  
  if(!value.hasOwnProperty(property)) return; // несуществующее свойство

  return f(value[property], propsArray.slice(1).join('.')); // вызыв функцией самой себя
  // но цепочка свойств короче на 1 элемент – самый левый отрезали
}

console.log( "Result:", f(x, 'a.goal')); // 1
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vaajnur
битриксоид
используй Object.keys(obj) и Object.values(obj)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы