2017-04-25 48 views
0

我想通過名爲「data」的嵌套varlist進行遞歸,並將其存儲在QML中作爲var。它包含一個名爲"delegates": [ { ... }, ... , { ... } ]的屬性,它爲一些代表聲明瞭一些屬性。如果其中一個屬性子列表包含一個屬性「"data"我有另一個可以通過該特定代表的動作遍歷的子級別QML/Javascript:向子數組添加自引用屬性內嵌嵌套var匹配某些標識符

我想要做的是創建一個函數來遞歸追加到我的varlist如果data.delegates[0].data存在,我想追加相當於data.delegates[0].data.parentPointer: data;如果data.delegates[0].data.delegates[0].data存在,我想追加一個與子級名稱匹配的子級別的指針("data")相當於data.delegates[0].data.delegates[0].data.parentPointer: data.delegates[0].data等等......

我並不特別關心(計算)成本,因爲這是一個t 的Component.onCompleted中的ime事件,並且嵌套最多隻有幾層。

這是一個Javascript問題,我相信,因爲我相信自動創建自引用指針的方式是通過某種遞歸調用function(這是通過定義在JavaScript中用於QML)。我知道該怎麼做追加簡單var套在Javascript操作在QML:

function appendStuff(myVar) { 
    var temp = myVar 
    temp.push("stuff") 
    myVar = temp 
} 

,我知道我可以在Javascript中有條件地檢查指定的屬性瓦特/在var,如:

if (typeof currentLevel.data !== "undefined") { 
    //do stuff.... 
} 

然而,我在遞歸方面掛了 - 如何重建一個多級數組 - 同時正確地跟蹤我在原始數組中的位置,直到我的編輯版本完成。我也意識到,當涉及到"parentPointer"時,我可能會需要我的編輯版本來引用它自己,這有點棘手。

任何想法?

+0

你能包括輸入數據和期望的輸出數據嗎? – naomik

回答

1

要將新字段分配給JS對象,您可以使用myjsobject['newprop'] = value

因此,一個簡單的遞歸函數來創建例如一個雙向鏈表,將是這樣的:

import QtQuick 2.0 
import QtQuick.Controls 1.4 

ApplicationWindow { 
    id: root 
    visible: true 
    width: 400; height: 450 

    function foo(depth, ref) { 
     var a = { value: depth } 
     if (depth !== 0) { 
      a['next'] = foo(depth - 1, a) 
     } 
     if (ref) a['pred'] = ref 
     return a 
    } 

    property var test: foo(10) 

    Component.onCompleted: console.log(test.value, test.next.value, test.next.pred.value) 
}