从对象中找到某一个属性?

const obj = {
    a: {
          b: {
               c: 1
       }
   }
}

使用字符串取值,比如说'a.b',要取到{ c: 1 }
可能是a,也可能是a.b,也可能是a.b.c,层级不确定
写一个函数,取到结果
function getValue(key) {}
调用,getValue('a.b')

阅读 2k
4 个回答

先把 key.split('.')变成数组然后遍历。

function getValue(obj, key) {
  const path = key.split('.');
  for (const p of path) {
    obj = obj[p];
  }
  return obj;
}

const obj = {
  a: {
    b: {
      c: 1
    }
  }
};

console.log(getValue(obj, 'a.b'));

考虑健壮性可以用第三方库,比如 ramda 的 R.path(['a', 'b'], {a: {b: 2}});

function getValue(obj, key) {
    return key.split(".").reduce((prev, curr) => (prev = prev[curr]), obj);
}
推荐问题