算法:给定一个对象与属性的路径返回属性值

49 阅读1分钟

1. 已知一个对象obj,和一个str,如下:

const obj = {
  a: {
    b: {
      c: "c",
    },
  },
};
const str = "a.b.c";

现在要根据str来获取obj中的内容,返回obj.a.b.c的值"c"。如果stra.b,则返回obj.a.b的值{ c: "c" }

答案

const obj = {
  a: {
    b: {
      c: "c",
    },
  },
};
const str = "a.b.c";
const res = str.split(".").reduce((accu, cur) => accu[cur], obj);

2. 升级一下上面的题目:

const obj = {
  a: {
    b: [
      {
        c: "c",
      },
    ],
  },
};
const str = "a.b[0].c";

obj.a.b[0].c的值。

答案

const str = 'a.b[0].c';
const res = str.split(/\[(\w+)\]|\./)
  .filter(i => i)
  .reduce((accu, cur) => accu[cur], obj)