当前位置: 首页 > 面试题库 >

通过字符串路径访问嵌套的JavaScript对象和Aray

云承弼
2023-03-14
问题内容

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

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的值(即“第1部分”)填充。part2quantity填充60。

无论如何,可以使用纯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');

编辑一些人已经注意到,如果传递的字符串最左边的索引与对象内正确嵌套的条目不对应,则此代码将引发错误。这是一个有效的问题,但是IMHO最好try / catch在调用时使用块来解决,而不是让此函数静默返回undefined无效索引。



 类似资料:
  • 我有以下数据结构来我的服务器通过Http调用 然后我有下面的实体类 不管怎样,我都无法让spring boot匹配json属性文本(这两个值总是空的)。。。这可行吗 我需要生成的最终JSON如下 所以基本上我需要把我的孩子信息附加到父母身上。 更新我能够通过使用自定义JsonDeserializer获得与父级相同的一个属性,如下所示 这只适用于一个属性集,每个类使用@JsonDeserialize

  • 问题内容: 我有基于json的数据结构,其中包含嵌套对象。为了访问特定的数据元素,我一直将对对象属性的引用链接在一起。例如: 如果未定义b或bc,则将失败并显示错误。但是,我想获得一个值(如果存在的话),否则只是未定义。无需检查链中每个值是否存在的最佳方法是什么? 我想尽可能地保持这种方法,所以我不必添加大量的辅助方法,例如: 要么 我也想尝试避免使用try / catch构造,因为这不是错误,因

  • 问题内容: 我一直在尝试搜索包含嵌套字段的文档。我创建了这样的嵌套映射: 我的搜索如下所示: 但是我收到此错误消息: 编辑 我仍然收到此错误。我正在通过Java执行此操作,因此这是我要创建的文档: 像这样创建索引: 我认为我可能对文档编制了错误的索引。 问题答案: TLDR:输入您的嵌套类型。 假设我们有一个普通类型,并且嵌套了另一个类型: 该行是分配给的嵌套查询所必需的,如下所示: 该行似乎仅在

  • 问题内容: 我正在尝试创建返回对象值的函数,但也可以很好地处理嵌套对象。例如: 我想通过向函数提供字符串“ foo.bar”来访问obj.foo.bar的值。 谢谢! 问题答案: 考虑一下:

  • 我从foursquare收到了一个json形式的响应。我尝试访问对象的某些部分,但没有成功。如何访问对象的地址?这是我试过的代码。 以下是json响应的一个示例: 完整的回应可以在这里找到

  • 问题内容: 我正在寻找一种通过字符串值访问属性的好的解决方案,但是如果该属性不存在,则应该创建它。如果根结构已经定义了结构的某些部分,则属性不应被覆盖,而应合并。 例如,如果您有一个空对象,并且想要设置一个深层结构而不使用eval。例如 我写了一个切实可行的解决方案,但是我猜这是很糟糕的代码: 也可以作为jsfiddle使用:https ://jsfiddle.net/gvaLzqqf/4/ 但是