2015-02-23 51 views
0

我有這樣一個輸入:遞歸函數得到沒有兄弟姐妹完整路徑

var query = {"a":{"b":{"branchs":[{"$or":{"d":10}},{"$or":{"e":10}}],"f":22}}}; 

,我需要一個輸出中:

output[0] = {"a":{"b":{"$or":{"d":10},"f":22}}} 
output[1] = {"a":{"b":{"$or":{"e":10},"f":22}}} 

我需要在「支數」鑰匙「分裂和複製」陣。該對象是多維的,它可以有N個分支鍵嵌套,所以我認爲它應該是一個遞歸函數。

我已經做了幾個測試,但我不能。我希望得到任何幫助

編輯:http://jsfiddle.net/cjsb7j1r/ 功能(它需要重構)

+0

我們如何瞭解哪些屬性來旁邊的名稱同一個對象內的''branchs''屬性?這總是隻有一個屬性的情況(例如你的例子中的「f」)? IOW,你在查詢樹的每一層爲節點給出了不同的名稱,那麼我們應該如何推廣這個模式呢?它是否總是按字典順序的單個字母名稱?它可以是任何名稱(但只有1個屬性,'branchs'除外)? – didierc 2015-02-26 11:59:27

+0

請避免僅將代碼作爲jsfiddle鏈接提供,並將代碼放入問題主體中。 – didierc 2015-02-26 12:05:05

回答

0

也許,這樣的事情?

var query = {"a":{"b":{"branchs":[{"$or":{"d":10}},{"$or":{"e":10}}],"f":22}}}; 

//output[0] = {"a":{"b":{"$or":{"d":10},"f":22}}} 
//output[1] = {"a":{"b":{"$or":{"e":10},"f":22}}} 

var output = []; 
for (var i = 0; i < query.a.b.branchs.length; i++){ 
    output.push({ 
     "a":{ 
      "b": {"$or": query.a.b.branchs[i]["$or"], "f": query.a.b.f} 
     } 
    }); 
} 
console.log(output); 

的jsfiddle:

http://jsfiddle.net/8zsrwbLq/1/

編輯:只是做了一個小的修正,因爲"f"總是在"b"水平

+0

輸出正確,但對其他輸入結構無效 – egimenez 2015-02-24 10:47:41

+0

@egimenez請您分享「其他」結構的示例嗎? – 2015-02-24 11:37:04

+0

我的意思是,雖然結果是正確的,但如果我修改嵌套或標籤,該函數不再有效。我設法執行該功能,我編輯主要帖子。謝謝! – egimenez 2015-02-26 11:17:44