javascript - 通过字符串路径访问嵌套的 JavaScript 对象和数组

标签 javascript path nested

我有一个这样的数据结构:

var someObject = {
    'part1' : {
        'name': 'Part 1',
        'size': '20',
        'qty' : '50'
    },
    'part2' : {
        'name': 'Part 2',
        'size': '15',
        'qty' : '60'
    },
    'part3' : [
        {
            'name': 'Part 3A',
            'size': '10',
            'qty' : '20'
        }, {
            'name': 'Part 3B',
            'size': '5',
            'qty' : '20'
        }, {
            'name': 'Part 3C',
            'size': '7.5',
            'qty' : '20'
        }
    ]
};

我想使用这些变量访问数据:

var part1name = "part1.name";
var part2quantity = "part2.qty";
var part3name1 = "part3[0].name";

part1name 应填充 someObject.part1.name 的值,即“Part 1”。与填充 60 的part2quantity 相同。

有没有办法用纯 javascript 或 JQuery 来实现这一点?

最佳答案

我只是根据我已有的一些类似代码制作了这个,它似乎有效:

Object.byString = function(o, s) {
    s = s.replace(/\[(\w+)\]/g, '.$1'); // convert indexes to properties
    s = s.replace(/^\./, '');           // strip a leading dot
    var a = s.split('.');
    for (var i = 0, n = a.length; i < n; ++i) {
        var k = a[i];
        if (k in o) {
            o = o[k];
        } else {
            return;
        }
    }
    return o;
}

用法::

Object.byString(someObj, 'part3[0].name');

查看工作演示:http://jsfiddle.net/alnitak/hEsys/

编辑有些人注意到,如果传递的字符串中最左边的索引与对象内正确嵌套的条目不对应,则此代码将引发错误。这是一个合理的担忧,但恕我直言,最好在调用时使用 try/catch block 来解决,而不是让此函数为无效索引默默返回 undefined

关于javascript - 通过字符串路径访问嵌套的 JavaScript 对象和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552696/

相关文章:

javascript - Bootstrap 工具提示在第二次鼠标悬停时立即显示

android - 无法识别路径中的 android 命令

c# - 为什么这个无效的文件路径//有效?

android - 为什么 Android Studio 安装程序会将 Android SDK 放入 %USER% 文件夹中?

php - 登录表单 > 叠加层因表单错误而关闭

javascript - 使用 webpack 的 require.ensure 函数为 javascript 模块编写测试

javascript - 如何使用 Underscore.js 从平面列表创建嵌套对象?

wpf - 将 ComboBox 绑定(bind)到嵌套在类中的枚举

javascript - 相同的代码在网站和 jsfiddle 上的行为不同

python - python 中的循环和嵌套导入