2017-08-29 14 views
5

Ben node.js aşağıdaki nesne ve lodash "sorguları" (Ben sadece terminalde node çalıştırıyorum):Lodash dönüş dizisi yolu geçerli olup olmadığını

var obj = { 
    a: [{ 
    b: [{ 
     c: "apple" 
    }, 
    { 
     d: "not apple" 
    }, 
    { 
     c: "pineapple" 
    }] 
    }] 
}; 

> _.get(obj, "a[0].b[0].c") 
'apple' 

> _.get(obj, "a[0].b[1].c") 
undefined 

> _.get(obj, "a[0].b[2].c") 
'pineapple' 

Sorum şu: yolun geçerli olduğu bulunan bir dizi değer döndürmek için bir yol var mı?

Örnek: ben bu en verimli olacak ya da ne gerek ama bazı koşullar geçerliyse bir dizi oluşturmak için _.each veya _.map kullanabilirsiniz eğer bilmiyorum

> _.get(obj, "a[].b[].c") 
['apple', 'pineapple'] 
+0

belirli yolu için sonuç dizisini almak istiyor musunuz, bir şey 'bir [0] .b'? Ya da soruda verdiğiniz gibi herhangi bir yol? – alexmac

+3

jsonpath'a bakın. https://github.com/dchester/jsonpath – Tomalak

+2

@ Tomalak'ın tavsiyesi sayesinde. Bu görev jsonpath kullanarak oldukça kolay olurdu: jsonpath.query (obj, '$ .a [*]. B [*]. C'); – shaochuancs

cevap

1

gibi belki bir şey çözüm JSONPath yerine Lodash kullanmaktı.

Onların github sayfa: https://github.com/dchester/jsonpath

Örnek:

> var jp = require("jsonpath") 
> var obj = { 
    a: [{ 
    b: [{ 
     c: "apple" 
    }, 
    { 
     d: "not apple" 
    }, 
    { 
     c: "pineapple" 
    }] 
    }] 
}; 

> jp.query(obj, "$.a[*].b[*].c") 
[ 'apple', 'pineapple' ] 
0

? @Tomalak yorumunda ileri sürdüğü gibi

let first = _.map(object, (item) => { 
    //change logic for maybe 
    if(item.b.c) { 
    return item.b.c 
    } 
}) 
//filter out nulls 
let second = _.without(first, null) 
+0

ve OP yolunun bir sonucuna ihtiyaç duyarsa a []. B []. C [] .d [] .... [k] .m'? –

İlgili konular