获取json数据?

假设有一个json和变量name

let data = {
    id: 343434,
    detail: {
        img: "111111",
        img2: "222222"
    }
}


let name = "detail.img";

我怎么通过变量name,获取到data.detail.img的数据

data[name] 这样不行。
除了根据.拆分name变量为数组[detail, img],然后循环数组组成data[detail][img]外,还有其他更方便的写法吗?

阅读 2.3k
4 个回答

可以用 new Function 实现

let data = {
    id: 343434,
    detail: {
        img: "111111",
        img2: "222222"
    }
}
let name = "detail.img";
new Function(`return data.${name}`)()
// 111111

image.png

建议使用 lodash.get

文档:https://lodash.com/docs/4.17....

import { get } from "lodash";

const img = get(data, name); // "111111"

在有成熟的社区库的情况下,不建议自行实现。

使用eval可以很好的解决

console.log(eval(`data.${name}`)) //111111

image.png

_ = {
    get: function get (o, paths) {
        if (!o) return o;
        if (!Array.isArray(paths)) {
            paths = (paths || '').match(/[\w$]+/g)
        }
        const [k, ...rest] = paths
        switch (paths.length) {
            case 0: return o;
            case 1: return o[k];
            default: return get(o[k], rest);
        }
    }
}
推荐问题
宣传栏