2017-08-29 22 views
5

मैं Node.js में निम्नलिखित वस्तु और lodash "क्वेरी" (मैं बस टर्मिनल में node चल रहा हूँ):Lodash वापसी सरणी यदि पथ मान्य है

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' 

मेरे सवाल यह है: क्या पथों की एक सरणी वापस करने का कोई तरीका है जहां पथ वैध पाया गया था?

उदाहरण:

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

आप विशिष्ट पथ के लिए परिणाम सरणी प्राप्त करना चाहते हैं, कुछ 'एक [0] .b'? या किसी भी पथ, जैसा कि आपने प्रश्न में प्रदान किया है? – alexmac

+3

जेसनपाथ देखें। https://github.com/dchester/jsonpath – Tomalak

+2

@ टॉमलाक की सलाह के लिए धन्यवाद। यह कार्य jsonpath का उपयोग करके बहुत आसान होगा: 'jsonpath.query (obj,' $ .a [*]। B [*]। C '); ' – shaochuancs

उत्तर

1

कुछ @Tomalak एक टिप्पणी में सुझाव दिया है के रूप में, समाधान JSONPath बजाय Lodash उपयोग करने के लिए किया गया था।

उनके GitHub पेज: https://github.com/dchester/jsonpath

उदाहरण:

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

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

मुझे नहीं पता है कि अगर यह सबसे कारगर हो जाएगा या आप क्या जरूरत है लेकिन आप एक सरणी बनाने के लिए अगर कुछ शर्तें मान्य हैं _.each या _.map उपयोग कर सकते हैं? शायद की तरह

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

और यदि ओपी को पथ 'ए []। बी [] सी []। डी [] .... [के]। एम' के परिणाम के लिए क्या चाहिए? –

संबंधित मुद्दे