Heim  >  Fragen und Antworten  >  Hauptteil

Durchqueren Sie verschachtelte Strukturen von JavaScript-Objekten und -Arrays mithilfe von Zeichenfolgenpfaden

<p>Ich habe eine Datenstruktur wie diese:</p> <pre class="brush:php;toolbar:false;">var someObject = { 'Teil 1' : { 'Name': 'Teil 1', 'Größe': '20', 'Menge': '50' }, 'Teil 2' : { 'Name': 'Teil 2', 'Größe': '15', 'Menge': '60' }, 'part3': [ { 'name': 'Teil 3A', 'Größe 10', 'Menge': '20' }, { 'name': 'Teil 3B', 'Größe 5', 'Menge': '20' }, { 'name': 'Teil 3C', 'Größe': '7,5', 'Menge': '20' } ] };</pre> <p>Ich möchte über die folgenden Variablen auf die Daten zugreifen: </p> <pre class="brush:php;toolbar:false;">var part1name = "part1.name"; var part2quantity = "part2.qty"; var part3name1 = "part3[0].name";</pre> <p>part1name sollte mit dem Wert von <code>someObject.part1.name</code> gefüllt sein, der „Teil 1“ ist. Das Gleiche gilt für part2quantity, das auf 60 aufgefüllt wird. </p> <p>Gibt es eine Möglichkeit, dies mit reinem JavaScript oder JQuery zu erreichen? </p>
P粉897881626P粉897881626432 Tage vor389

Antworte allen(2)Ich werde antworten

  • P粉720716934

    P粉7207169342023-08-16 19:39:27

    这现在可以通过lodash使用_.get(obj, property)来支持。请参阅https://lodash.com/docs#get

    文档中的示例:

    var object = { 'a': [{ 'b': { 'c': 3 } }] };
    
    _.get(object, 'a[0].b.c');
    // → 3
    
    _.get(object, ['a', '0', 'b', 'c']);
    // → 3
    
    _.get(object, 'a.b.c', 'default');
    // → 'default'

    Antwort
    0
  • P粉733166744

    P粉7331667442023-08-16 14:08:25

    我刚刚根据我已经有的一些类似代码创建了这个,它似乎可以工作:

    Object.byString = function(o, s) {
        s = s.replace(/\[(\w+)\]/g, '.$1'); // 将索引转换为属性
        s = s.replace(/^\./, '');           // 去掉前导点
        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块来处理,而不是使这个函数静默地返回undefined

    Antwort
    0
  • StornierenAntwort