JSFiddle - React, Tailwind, and code Playground

by krustnic

JavaScript

// Обращение к свойству объекта
const o = {
  a: {
    b: {},
    c: 42
  },
  z: null
};

/*
(o, 'a.c') => 42
(o, 'a.d') => undefined
(o, 'z') => null
*/


function f2(obj, str) {
	return eval('obj.' + str)
}

function f3(obj, str) {
	const keys = str.split('.')
  let link = obj
  
  for(const s of keys) {
  	if (!link[s]) return obj[s]
    
    link = link[s]
  }
  
  return link
}

function f(obj, str) {
	return str.split('.').reduce((link, key, i, arr) => {
  if (!link[key]) arr.splice(i-1)
  return link[key]
  }, obj)
}

console.log(f(o, 'a.c'))
console.log(f(o, 'a.d'))
console.log(f(o, 'z'))